我已指定 tmp 目錄/tmp
(位於 Drupal 管理路徑admin/config/media/file-system
)。透過運行dpm(file_directory_temp());
來確認此設定devel/php
。
的權限/tmp/drupal_debug.txt
(包括我了解到的SELinux設定)這裡)就像這樣:
$ ls -ltZ /tmp/
-rwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 drupal_debug.txt
此外,如果我dd("Foo")
從 PHP CLI 工具中運行phpsh
使用鼓集成獲得引導的 Drupal 環境,然後我就可以dd()
毫無問題地列印到此檔案。我還需要做些什麼才能允許 Apache 寫入此文件嗎?
Apache 日誌中沒有錯誤,值得注意的是,即使我運行sudo setenforce 0
.
另一個有趣的點:來自的 PHP 測試片段這個 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/modules/contrib/ 的第1行) devel/devel.module(1285) :eval() 的程式碼)。
即使我也是如此刪除文件/tmp/drupal_debug.txt
。
但是,正如評論中所討論的,透過網路運行此程式碼片段時不會建立任何文件,而會建立一個空文件是如果我從 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
有效。