내 사이트에 아바타를 업로드 할 때이 오류가 발생합니다. 나는 전에 그것을 얻은 적이 없으며 최근 에이 오류가 발생하기 시작하도록 변경된 것이 없습니다 ...
Warning: is_writable() [function.is-writable]:
open_basedir restriction in effect.
File(/) is not within the allowed path(s):
답변:
PHP 구성에서 open_basedir
설정 을 수정합니다 ( 런타임 구성 참조 ).
이 open_basedir
설정은 주로 특정 사용자의 PHP 스크립트가 다른 사용자 계정의 파일에 액세스하지 못하도록 방지하는 데 사용됩니다. 따라서 일반적으로 자신의 계정에있는 모든 파일은 자신의 스크립트로 읽을 수 있어야합니다.
.htaccess
PHP가 Linux 시스템에서 Apache 모듈로 실행되는 경우 를 통한 예제 설정 :
<DirectoryMatch "/home/sites/site81/">
php_admin_value open_basedir "/home/sites/site81/:/tmp/:/"
</DirectoryMatch>
/my/cutsom/dir/
. 왜 생각했는지 모르겠습니다.
php_admin_value
.htaccess
. .htaccess 파일에서 DirectoryMatch를 사용할 수 없습니다 . ( open_basedir
만약 비활성화 할 수 있다면 어떤 종류의 보안 조치가 필요합니까?)
이 오류를 해결하려면 httpd.conf 파일을 편집해야합니다. apache2handler 섹션 지시자 서버 루트의 phpinfo에서 볼 수 있기 전에. 예를 들어, 제 경우에는 이런 식으로-/ etc / httpd / httpd.conf. httpd.conf 파일을 열고 open_basedir 매개 변수에 대한 언급을 찾으십시오. 그리고 없음으로 설정하십시오. ( php_admin_value open_basedir 없음 )
open_basedir
내에서 구성 php.ini
. (PHP 5를 사용하는 Raspberry Pi의 Arch Linux)
경우에 당신은 이것을 실행하고 있습니다 php file.php
. php.ini
다음 파일 찾기 를 편집해야 합니다.
: locate php.ini
/etc/php/php.ini
open_basedir
속성에 파일의 경로를 추가합니다 .
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/:/run/media/andrew/ext4/protected
나에게 문제는 전체를 실행하는 Plesk 서버의 구성 값이 잘못되었거나 누락되었습니다. 나는 단지 여기의 지시를 따랐다 : http://davidseah.com/blog/2007/04/separate-php-error-logs-for-multiple-domains-with-plesk/
각 VirtualHost 정의에 대해 별도의 오류 로그 파일을 갖도록 PHP를 구성 할 수 있습니다. 트릭은 Plesk를 깨지 않고는 구성을 직접 만질 수 없기 때문에 설정 방법을 정확히 아는 것입니다. (dv)의 모든 도메인 이름은 / var / www / vhosts에 자체 디렉토리가 있습니다. 일반적인 디렉토리에는 다음과 같은 최상위 디렉토리가 있습니다.
cgi-bin/
conf/
error_docs/
httpdocs/
httpsdocs/
...and so on
다음 줄을 사용하여 도메인 디렉터리의 conf / 폴더에 vhost.conf 파일을 만들 수 있습니다.
php_value error_log /path/to/error_log
php_flag display_errors off
php_value error_reporting 6143
php_flag log_errors on
실제 설치와 일치하도록 첫 번째 값을 변경하십시오 (/tmp/phperrors.log 사용). vhost.conf 파일 편집을 완료 한 후 다음을 사용하여 콘솔에서 구성을 테스트합니다.
apachectl configtest
…or if you don’t have apachectl (as Plesk 8.6 doesn’t seem to)…
/etc/init.d/httpd configtest
그리고 마지막으로 Plesk에게이 변경 사항을 적용했다고 말하십시오.
/usr/local/psa/admin/bin/websrvmng -a
참조하는 경로는 작업 공간의 directoryRoot가 아니라 incorect입니다. 액세스하려는 파일의 절대 경로를 만들어보십시오. 이제 상대 경로를 사용하고있을 것입니다.
ispconfig3을 사용하는 경우 :
웹 사이트 섹션-> 옵션-> PHP open_basedir로 이동합니다.
/ var / www / clients / client2 / web3 / image : / var / www / clients / client2 / web3 / web : / var / www / ... 등
/ var / www / clients / client2 / web3 / image :
스크립트가 예를 들어 include 또는 fopen ()을 사용하여 파일 시스템에 액세스하려고하면 파일 위치가 확인됩니다. 파일이 지정된 디렉토리 트리 밖에 있으면 PHP는 액세스를 거부합니다.
PHP IIS 스택을 실행 중이고이 오류가있는 경우 일반적으로 빠른 권한 수정입니다.
Windows 서버를 직접 관리하고 액세스 권한이있는 경우 먼저 다음을 시도하십시오.
글쓰기에 대해 슬픔을 느끼는 폴더로 이동하여 마우스 오른쪽 버튼으로 클릭> 속성 열기> 보안.
어떤 사용자가 폴더에 액세스 할 수 있는지, 어떤 사용자는 읽기 전용이고 어떤 사용자는 전체가 있는지 확인합니다. 쓰기를 차단하는 그룹이 있습니까?
수정 사항은 IIS 설정에 따라 다릅니다. 특정 사용자 IUSR 또는 응용 프로그램 풀 ID와 함께 익명 인증을 사용하고 있습니까?
어쨌든 IUSR, IIS_IUSRS 또는 응용 프로그램 풀 ID 중 하나에 대한 새로운 전체 쓰기 권한을 추가하게 될 것입니다. 제가 말했듯이 이것은 설정과 수행 방법에 따라 달라질 것입니다. 당신은 이것에 대한 구글 토끼 구멍을 내려갈 수 있습니다 (그런 게시물 -IIS_IUSRS 및 IIS8의 IUSR 권한 ) 나를 위해, 나는 내 앱 풀 ID와 함께 anon을 사용하므로 MACHINE_NAME\IIS_IUSRS
모든 임시 또는 업로드에서 전체 읽기 / 쓰기로 벗어날 수 있습니다. 폴더.
open_basedir =
php.ini에 추가 할 필요가 없습니다 .
@yogihosting의 답변 외에도 DirectAdmin을 사용하는 경우 다음 단계를 따르십시오.
admin
기본적으로 사용자 이름입니다 .페이지 상단의 텍스트 영역에 변경하려는 구성을 입력합니다. 기존 구성 파일을 고려하고이를 기반으로 값을 수정해야합니다. 예를 들어 open_basedir
내부에 설정되어있는 <Directory>
경우 관련 <Directory>
태그 에서 변경 사항을 둘러싸 야합니다 .
<Directory "/path/to/directory">
php_admin_value open_basedir none
</Directory>
필요한 사항을 변경 한 후 "저장"버튼을 클릭하십시오.
그러나 구성 파일을 편집하는 다른 방법이 있습니다.
주의 : 오류가 발생하거나 다운 타임이 발생할 수 있으므로주의하고 다음 단계를 따르십시오. 권장되는 방법은 구성 파일을 부적절하게 수정하는 것을 방지하고 오류를 표시하는 이전 방법입니다.
/usr/local/directadmin/data/users
. 나열된 사용자에서 변경하려는 도메인과 관련된 사용자로 이동하십시오.여기에 httpd.conf
파일이 있습니다. 그것으로부터 백업을 만드십시오 :
cp httpd.conf httpd.conf.back
이제 선택한 편집기로 구성 파일을 편집하십시오. 예를 들어 기존 open_basedir
을 none
. 물건을 제거하려고하지 마십시오. 그렇지 않으면 다운 타임이 발생할 수 있습니다. 편집 후 파일을 저장하십시오.
다음 방법 중 하나를 사용하여 Apache 웹 서버를 다시 시작합니다 ( sudo
필요한 경우 사용 ).
httpd -k graceful
apachectl -k graceful
apache2 -k graceful
오류가 발생하면 기본 구성 파일을 백업 된 파일로 바꾸고 웹 서버를 다시 시작하십시오.
다시 말하지만, 첫 번째 솔루션이 선호되는 솔루션이므로 처음에는 두 번째 방법을 시도해서는 안됩니다. 주의 사항에서 언급했듯이 첫 번째 방법의 장점은 잘못 구성된 항목을 저장하는 것을 방지한다는 것입니다.
도움이 되었기를 바랍니다.
Apache vhost -File을 사용하여 Windows 서버에서 응용 프로그램 별 ini 옵션으로 PHP를 실행하고 있습니다. 따라서 php-command 의 -d 옵션을 사용합니다 .
이러한 옵션 중 하나로 모든 응용 프로그램에 대해 open_basedir 을 설정하고 있습니다.
UNC-Path를 포함하여 여러 URL을 open_basedir로 설정해야했는데이 경우 구문을 찾기가 약간 어려웠습니다. 세미콜론으로 경로를 구분 해야하며 첫 번째 경로가 드라이브 문자로 시작하는 경우 세미콜론으로 목록을 시작해야 할 수도 있습니다. 적어도 그것은 나를 위해 일하는 것입니다.
예:
php.exe -d open_basedir=;d:/www/applicationRoot;//internal.unc.path/ressource/
그냥 검색
open_basedir =
php.ini에서 비활성화하십시오. 이것이이 문제를 해결하는 가장 간단한 해결책입니다.
변경 전 open_basedir =
변경 후 ;open_basedir =
추신-변경 후 서버를 다시 시작하는 것을 잊지 마십시오.
즐겨 ;)