디버깅을 위해 파일에 쿼리를 작성하려고합니다. 파일은 database/execute.php
. 내가 쓰려는 파일은 database/queries.php
.
나는 사용하려고 file_put_contents('queries.txt', $query)
하지만 나는
file_put_contents (queries.txt) [function.file-put-contents] : 스트림 열기 실패 : 권한이 거부되었습니다.
내가이 queries.txt
777 파일 chmod’d을, 문제는 무엇을 할 수 있을까?
답변
디렉토리 권한을 조정 해보십시오.
터미널에서 실행 chmod 777 database
(데이터베이스 폴더가 포함 된 디렉토리에서)
아파치와 올바르게 chmodd 된 경우 아무도이 디렉토리에 액세스 할 수 없습니다.
또 다른 방법은 echo “getcwd ()”입니다. 현재 디렉토리가 표시되며 ‘/something…/database/’가 아닌 경우 ‘query.txt’를 서버의 전체 경로로 변경해야합니다.
답변
다른 옵션
Apache (www-data)
폴더의 소유자를 만들 수 있다는 것 입니다.
sudo chown -R www-data:www-data /var/www
file_put_contents
이제 작동 해야합니다 . 그러나 보안을 강화하려면 아래와 같은 권한을 설정하는 것이 좋습니다.
find /var/www -type d -print0 | xargs -0 chmod 0755 # folder
find /var/www -type f -print0 | xargs -0 chmod 0644 # files
/var/www
PHP 파일의 루트 폴더로 변경 하십시오.
답변
지금은 꽤 오래되었지만 이와 같은 파일에 수동으로 쿼리를 작성할 필요는 없습니다. MySQL에는 로깅 지원이 내장되어 있으므로 개발 환경 내에서 활성화하기 만하면됩니다.
‘일반 쿼리 로그’에 대한 문서를 살펴보십시오.
http://dev.mysql.com/doc/refman/5.1/en/query-log.html
답변
여러분들이 문제를 한 달 동안 겪었고 모든 것을 다했지만 고칠 수 없었지만 이제 해결책을 알고 있습니다.
공유 리눅스 호스팅을 사용하고 있는데, 관리자가 PHP를 5.3으로 변경했을 때 “file_put_contents”코드에 대해 많은 오류가 발생했습니다. 내 계획을 테스트 해보십시오.
호스트에서 mytest.php와 같은 파일을 만들고이 코드를 입력하고 저장합니다.
<?php mail('Your-EMail','Email-Title','Email-Message'); ?>
URL “www.your-domain.com/mytest.php”를 한 번 열고 이메일을 확인합니다. mytest.php에 입력 한 정보가 포함 된 호스트의 이메일이 있어야합니다. 보낸 사람 이름을 확인하십시오. 자사의 경우 아무도는 뭔가 정의되지 때문에 당신은 “권한 거부”에 대한 문제가 있고 보낸 사람 이름이 내 아이디 같은 경우 : iietj8qy@hostname5.netly.net을 당신은 확률값을 가지고 있겠지.
내 관리자가 서버를 변경하고 호스트를 다시 설치 한 것 같습니다. 문제가 해결 된 것 같습니다. 호스트 관리자에게 내가 말한 내용을 말하면 답을 찾을 수 있습니다.
도움이 되길 바랍니다!
답변
나는 그것이 매우 오래된 질문이라는 것을 알고 있지만 몇 가지 자세한 설명과 함께 좋은 해결책을 추가하고 싶었습니다. 시스템과 같은 Ubuntu에서 두 개의 명령문을 실행해야하며 매력처럼 작동합니다.
Linux의 권한은 3 자리 숫자로 표시 할 수 있습니다. 첫 번째 숫자는 파일 소유자의 권한을 정의합니다. 두 번째 숫자는 특정 사용자 그룹의 권한입니다. 세 번째 숫자는 그룹의 소유자 나 구성원이 아닌 모든 사용자의 권한을 정의합니다.
웹 서버는 그룹의 구성원 인 ID로 실행되어야합니다. 웹 서버는 파일 및 디렉토리의 소유자와 동일한 ID로 실행해서는 안됩니다. Ubuntu에서는 ID www-data로 아파치를 실행합니다. 해당 ID는 권한이 지정된 그룹의 구성원이어야합니다.
파일의 내용을 변경하려는 디렉토리에 적절한 권한을 부여하려면 다음 명령문을 실행하십시오.
find %DIR% -type d -exec chmod 770 {} \;
이는 OP의 질문에서 % ROOT % / database 디렉토리에 대한 권한이 그에 따라 변경되어야 함을 의미합니다. 따라서 변경하거나 제거해서는 안되는 파일을 해당 디렉토리 내에 두지 않는 것이 중요합니다. 내용을 변경해야하는 파일에 대해 별도의 디렉토리를 만드는 것이 가장 좋습니다.
디렉터리에 대한 읽기 권한 (4)은 디렉터리 내에서 메타 데이터와 함께 모든 파일과 디렉터리를 수집 할 수 있음을 의미합니다. 쓰기 권한 (2)은 디렉토리의 내용을 변경할 수있는 권한을 제공합니다. 파일 추가 및 제거, 권한 변경 등을 의미합니다. 실행 권한 (1)은 해당 디렉토리로 이동할 수있는 권한이 있음을 의미합니다. 후자가 없으면 디렉토리로 더 깊이 들어가는 것이 불가능합니다. 웹 서버는 파일 내용을 변경해야 할 때 읽기, 쓰기 및 실행 권한이 필요합니다. 따라서 숫자 7이 필요합니다.
두 번째 진술은 OP에 대한 질문입니다.
find %DOCUMENT_ROOT%/database -type f -exec chmod 760 {} \;
문서를 읽고 쓸 수 있어야하지만 파일을 실행할 필요는 없습니다. 7은 파일 소유자에게, 6은 그룹에 제공됩니다. 웹 서버는 내용을 변경하기 위해 파일을 실행할 권한이 필요하지 않습니다. 이러한 쓰기 권한은 해당 디렉토리의 파일에만 부여되어야합니다.
다른 모든 사용자에게는 어떠한 권한도 주어서는 안됩니다.
파일을 변경할 필요가없는 디렉토리의 경우 5 개의 그룹 권한으로 충분합니다. 권한 및 몇 가지 예에 대한 문서 :
https://wiki.debian.org/Permissions
https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions
답변
이 링크 stackoverflow-image 저장 에서 정보를 수집하는 것은 chmod 777 및 사용자 azerafati 및 Loek Bergman에서 작동하지 않습니다.
/ etc / apache / envvars 파일을 보면 다음과 같은 내용이 표시됩니다.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Apache는 사용자 이름 ‘www-data’로 실행됩니다.
‘0755’는 파일 소유자가 읽기 / 쓰기 / 실행할 수 있지만 그룹 및 다른 사용자는 쓸 수 없음을 의미합니다. 따라서 터미널에서 ‘이미지’폴더가있는 폴더로 이동하십시오. 그런 다음 다음을 입력하십시오.
find images -type d -exec chmod 0755 {} \;
find images -type f -exec chmod 0755 {} \;
sudo chown -R www-data:www-data images
소유자를 변경하기 전에 먼저 권한을 변경해야합니다. 메시지가 나타나면 암호를 입력하십시오. 그러면 이미지 폴더의 ‘www-data’소유자가됩니다.
이제 업로드가 작동합니다.
답변
Ubuntu를 사용하고 웹 호스팅 서비스가 아닌 페이지를 로컬로로드 할 때이 오류를 수신하는 모든 사용자의 경우
방금 노틸러스 ( sudo nautilus
)를 열고 열려고하는 파일을 마우스 오른쪽 버튼으로 클릭하고 속성> 설정> ‘다른 모든 사람’에게 읽기 쓰기 권한을 부여 하여이 문제를 해결 했습니다.