Magento 1.8.1.0 WysiWygエディターは画像マネージャーにサムネイルを表示していません
-
16-10-2019 - |
質問
私はこれをバグについてのコメントのために投稿し、同じ問題を抱えている人を助けるために投稿しています。 (自分で投稿された回答)
wysiwygエディターを使用して画像を挿入する場合、画像マネージャーはサムネイル画像を表示していません。
Magentoによって作成された画像URLを見る
http://site.domain/media//.thumbs/ex_logo_sm.jpg?rand = 1392103618
URLのダブル//に注意して、純粋に欠けているように見えます
解決
コードをトレースすると、にあるヘルパールーチンには絶えず欠落しているように見えます Mage_Cms_Helper_Wysiwyg_Images::getBaseUrl()
ルーチンはそのようなものです:
public function getBaseUrl()
{
return Mage::getBaseUrl('media') . '/';
}
に変更を加えます
public function getBaseUrl()
{
return Mage::getBaseUrl('media') . Mage_Cms_Model_Wysiwyg_Config::IMAGE_DIRECTORY . '/';
}
問題を修正します。
これはから呼ばれます Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl()
return str_replace('\\', '/', $this->getHelper()->getBaseUrl() . $thumbSuffix) . $randomIndex;
定数が所定の位置にないことなく、間違ったURLを明確に出力します。
他のヒント
クライアントサイトでこれと同じ問題がありましたが、実際にはかなりの数の要素がありましたが、おそらく、存在しない画像の問題がどのように引き起こされたかについて、おそらく説明を提供できます。
上記の問題は存在していました、それによりマゼントがチェックしていました
media/wysiwyg/.thumbs/image.jpg
, 、正しい場所とは対照的にmedia/wysiwyg/.thumbs/wysiwyg/image.jpg
, 、および存在する場合、の誤ったURLへのリンクを表示する場合http://example.com/media//wysiwyg/.thumbs/image.jpg
FDAppSec-212がインストールされているため、の使用が導入されました
realpath()
しかし、セキュリティの問題を削除するには、これと私たちのシンリンクの使用の組み合わせを削除するためにmedia
ディレクトリが原因でしたMage_Cms_Model_Wysiwyg_Images_Storage::getThumbsPath()
のディレクトリを返すmedia/wysiwyg/.thumbs
, 、 とは対照的にmedia/wysiwyg/.thumbs/wysiwyg
- その理由は、この方法が、私たちのメディアディレクトリが経由で拡張されていたため、Trueに評価されなかった条件付きチェックを作成するためですrealpath()
そして、そのため、0を返しませんでしたstrpos()
チェック、以下の小切手、6行目を参照してください。public function getThumbsPath($filePath = false) { $mediaRootDir = Mage::getConfig()->getOptions()->getMediaDir(); $thumbnailDir = $this->getThumbnailRoot(); if ($filePath && strpos($filePath, $mediaRootDir) === 0) { $thumbnailDir .= DS . dirname(substr($filePath, strlen($mediaRootDir))); } return $thumbnailDir; }
これは私たちにとってユニークですが、Dotfile Directoriesへのアクセスも拒否していましたが、AppSec-212をインストールするまで提供したことがなかったため、これを以前に問題として気づいていませんでした。何でも
.thumbs
私たちが経験した問題は、1.9.1.0(執筆時点での最新バージョン)にまだ存在します - 画像がまだ「その場で」を使用せずに機能しているので、誰も通知しないと思います。 .thumbs
ディレクトリ、それはAppSec-212の導入と、シンラムリンクと組み合わせたものでした media
ディレクトリでは、サムファイルが間違った場所で生成されたため、誤ってチェックされたパスがtrueを返し、その後画像に404を確認しました。
面白いことに、AppSec-212は、それが私たちの同時に行われなかった場合、問題を修正していたでしょう media
ディレクトリ。
ちなみに、ここに私たちの修正があります:
App/Code/Core/Mage/CMS/Helper/WysiWyg/Images.php:
@@ -89,7 +89,7 @@ public function getStorageRoot()
*/
public function getBaseUrl()
{
- return Mage::getBaseUrl('media') . '/';
+ return Mage::getBaseUrl('media') . '/' . Mage_Cms_Model_Wysiwyg_Config::IMAGE_DIRECTORY . '/';
}
/**
App/Code/Core/Mage/CMS/Model/WysiWyg/Images/Storage.php:
@@ -336,7 +336,7 @@ public function getThumbnailUrl($filePath, $checkFile = false)
$mediaRootDir = $this->getHelper()->getStorageRoot();
if (strpos($filePath, $mediaRootDir) === 0) {
- $thumbSuffix = self::THUMBS_DIRECTORY_NAME . DS . substr($filePath, strlen($mediaRootDir));
+ $thumbSuffix = self::THUMBS_DIRECTORY_NAME . DS . substr($filePath, strlen(realpath(Mage::getConfig()->getOptions()->getMediaDir())));
if (! $checkFile || is_readable($mediaRootDir . $thumbSuffix)) {
$randomIndex = '?rand=' . time();
@@ -405,8 +405,8 @@ public function resizeOnTheFly($filename)
*/
public function getThumbsPath($filePath = false)
{
- $mediaRootDir = Mage::getConfig()->getOptions()->getMediaDir();
- $thumbnailDir = $this->getThumbnailRoot();
+ $mediaRootDir = realpath(Mage::getConfig()->getOptions()->getMediaDir());
+ $thumbnailDir = realpath($this->getThumbnailRoot());
if ($filePath && strpos($filePath, $mediaRootDir) === 0) {
$thumbnailDir .= DS . dirname(substr($filePath, strlen($mediaRootDir)));
実際、いくつかのエラーが一緒になっています。
デフォルトでは、Magentoはディレクトリの親指を保存しているようです media/wysiwyg/.thumbs/wysiwyg/
. 。だが Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl()
親指を探します media/wysiwyg/.thumbs/
.
エラーは親指がある場合にのみトリガーされます media/wysiwyg/.thumbs/
. 。親指が間違ったディレクトリに保存される条件下ではわかりませんでした。しかし、少なくとも、一部のサーバーのみがこの問題を示す理由を説明しています。
だから、プロキシブルーが言ったことに加えて、あなたは変えなければならない Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl()
から
public function getThumbnailUrl($filePath, $checkFile = false)
{
$mediaRootDir = $this->getHelper()->getStorageRoot();
if (strpos($filePath, $mediaRootDir) === 0) {
$thumbSuffix = self::THUMBS_DIRECTORY_NAME . DS . substr($filePath, strlen($mediaRootDir));
if (! $checkFile || is_readable($mediaRootDir . $thumbSuffix)) {
$randomIndex = '?rand=' . time();
return str_replace('\\', '/', $this->getHelper()->getBaseUrl() . $thumbSuffix) . $randomIndex;
}
}
return false;
}
に
public function getThumbnailUrl($filePath, $checkFile = false)
{
$mediaRootDir = Mage::getConfig()->getOptions()->getMediaDir() . DS;
if (strpos($filePath, $mediaRootDir) === 0) {
$thumbSuffix = self::THUMBS_DIRECTORY_NAME . DS . substr($filePath, strlen($mediaRootDir));
if (! $checkFile || is_readable($this->getHelper()->getStorageRoot() . $thumbSuffix)) {
$randomIndex = '?rand=' . time();
return str_replace('\\', '/', $this->getHelper()->getBaseUrl() . $thumbSuffix) . $randomIndex;
}
}
return false;
}
できれば、コアファイルを上書きすることではなく、モジュールを設定することにより。