Drupal 7、Fedora - dd() が Web 上で動作しない

Drupal 7、Fedora - dd() が Web 上で動作しない

tmp ディレクトリを/tmp(Drupal 管理パスadmin/config/media/file-system) に指定しました。この設定は、dpm(file_directory_temp());から実行することで確認できますdevel/php

(SELinuxの設定を含む)の権限/tmp/drupal_debug.txtについては、ここ) は次のようになります。

$ ls -ltZ /tmp/
-rwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 drupal_debug.txt

さらに、dd("Foo")PHP CLIツール内から実行するとphpsh使用してdrush統合dd() ブートストラップされた Drupal 環境を取得すると、問題なくこのファイルに印刷することができます。Apache がこのファイルに書き込めるようにするには、何か追加で必要なことはありますか?

Apache ログにはエラーがなく、特に、 を実行しても問題は解決しませんsudo setenforce 0

もう一つの興味深い点は、このStackOverflowの質問から実行すると「成功」が返されますdevel/php。つまり、Drupal は 内の任意のファイルに書き込むことができると認識しています/tmp。ただし、コードを次の形式に変更すると:

 $handle = fopen("/tmp/drupal_debug.txt", "x");
 if ($handle) echo "Success!";
 else print_r(error_get_last());

それからこの警告が表示され、成功メッセージは表示されません:

警告: fopen(/tmp/drupal_debug.txt): ストリームを開けませんでした: eval() にファイルが存在します (/srv/www/decipher-storyscope/public_html/decipher/7f/profiles/storyscope/modules/contrib/devel/devel.module(1285) の 1 行目: eval() されたコード)。

これは私が消去ファイル/tmp/drupal_debug.txt

しかし、コメントで議論されているように、このスニペットをWeb上で実行してもファイルは作成されませんが、空のファイルはPHP コマンドラインから同じスニペットを実行すると作成されます。

注意。コードがdd()Ubuntu にインストールされ、呼び出されると、関数は正常に動作します。

答え1

システム管理者から、tmpディレクトリを に置くようにというアドバイスを受けました/srv/www

shell> sudo mkdir /srv/www/my-project/tmp
shell> sudo chmod a+w /srv/www/my-project/tmp

Drupalではsettings.php:

$conf['file_temporary_path'] = '/srv/www/my-project/tmp';

その後:tail -f /srv/www/my-project/tmp/drupal_debug.txt動作します。

関連情報