나는 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
사용하여드러시 통합dd()
부트스트랩된 Drupal 환경을 얻으려면 문제 없이 이 파일을 인쇄하는 데 사용할 수 있습니다 . 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/의 1번째 줄). devel/devel.module(1285) : eval()'d 코드).
내가 봐도 이건 사실이야삭제파일 /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
작동합니다.