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
動作します。