今日、サイトをサーバーにアップロードしたところ、次のようなエラーが発生しました。
Public://styles/sponsor_image/public/TerraThermaSponsorLogo.pngにある派生画像を生成できません。
画像スタイルは画像を生成できません。私はchmod -R 775 styles/
を使用してstyles/*フォルダーに権限を設定しようとしましたが、chmod -R 777 styles/
を試しました。フォルダの所有者はOKです。何が悪いのかわかりません。
Public://に関連付けられているディレクトリは、sites/default/filesであり、問題ありません。
簡単に言えば、これは私がこの問題を抱えているときはいつでも私がすることです:
ユーザーをWebサーバーを実行しているユーザー(Apache、httpd、www-data、nginxなど)に変更します。
Sudo -u [user] -s /bin/bash
およびcd
を直接ファイルディレクトリに移動し、ランダムなデータを新しいファイルに書き込みます。
echo "Random text" > some_file_name
通常、これは失敗し、OSからエラーメッセージが表示され、少なくともDrupalから問題が解決されます。これが機能しない場合は、ファイル権限の問題があります。この質問は役立つ: 推奨されるディレクトリ権限は何ですか?
また、サーバーにグラフィカルライブラリ(php-Gdなど)がインストールされていることを確認してください。/admin/config/media/image-toolkit(D7)を確認してください。
エラーはImageモジュール(コア)から発生しており、ロジックは次のようになります。
_$success = file_exists($derivative_uri) || image_style_create_derivative($style, $image_uri, $derivative_uri);
if ($success) {
$image = image_load($derivative_uri);
file_transfer($image->source, array('Content-Type' => $image->info['mime_type'], 'Content-Length' => $image->info['file_size']));
} else {
watchdog('image', 'Unable to generate the derived image located at %path.', array('%path' => $derivative_uri));
...
}
_
したがって、エラーはDrupalにすべての画像効果を適用して結果の画像のキャッシュバージョンを保存することによる画像派生物の生成に問題がある場合に発生します。
(診断目的で)問題を再現する最も簡単な方法は、drushを使用することです。
Drushから直接image_style_create_derivative()を呼び出します。
_drush -v eval 'image_style_create_derivative(reset(@image_styles()), "public://pictures/picture-123.png", "public://styles/test/test-success.png");
_
_picture-123.png
_をログの既存の画像に置き換えます。
Public://styles/foo/public/pictures/picture-x.pngにある派生画像を生成できません
または、他の既存のものを使用します。 _drush sqlq "SELECT * FROM file_managed"
_。
シェルにアクセスできない場合は、Develモジュールを使用して、_/devel/php
_に移動し、PHPコードをそこに貼り付けます。
注:files
フォルダーがApacheユーザーによって所有されている場合、テスト目的でこのユーザーとしてログインする必要があります。それ以外の場合は、drushコマンドの前に_Sudo -u www-data
_を付けます。
以下の可能性があります。
drush eval "print_r(Gd_info());"
)。strace
を使用すると、権限の問題のデバッグを簡単に行うことができます。それをインストールし、テストするコマンドの前に_strace -f
_を付けます(rootである必要はありません)。
例では:
_$ strace -f drush -v eval 'image_style_create_derivative(reset(@image_styles()), "public://existing-image.png", "public://styles/test/test-success.png");' 2>&1 | grep "default/files"
mkdir(".../sites/default/files/styles/test", 0775) = -1 EACCES (Permission denied)
chmod(".../sites/default/files/styles/test", 0775) = -1 EPERM (Operation not permitted)
_
files
を所有する別のアカウントでログインしている場合は、drushコマンドの前に_Sudo -u www-data
_を付けて、コマンド全体をApacheユーザーとして実行することを忘れないでください。
これは、PHPがlibjpegなしでコンパイルされている場合にも発生します(生成されないイメージにjpegソースがある場合)。Gd_info()
の出力を確認して、 PHPサポート。