Programing

file_put_contents 권한이 거부되었습니다.

lottogame 2020. 9. 19. 11:50
반응형

file_put_contents 권한이 거부되었습니다.


디버깅을 위해 파일에 쿼리를 작성하려고합니다. 파일은 database/execute.php. 내가 쓰려는 파일은 database/queries.php.

나는 사용하려고 file_put_contents('queries.txt', $query)

하지만 나는

file_put_contents (queries.txt) [function.file-put-contents] : 스트림을 열지 못했습니다 : 권한이 거부되었습니다.

내가이 queries.txt777 파일 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/wwwPHP 파일의 루트 폴더로 변경 하십시오.

지금은 꽤 오래되었지만 이와 같은 파일에 수동으로 쿼리를 작성할 필요는 없습니다. 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 {} \;

Being able to read and write a document is required, but it is not required to execute the file. The 7 is given to the owner of the files, the 6 to the group. The webserver does not need to have the permission to execute the file in order to change its content. Those write permissions should only be given to files in that directory.

All other users should not be given any permission.

For directories that do not require to change its files are group permissions of 5 sufficient. Documentation about permissions and some examples:

https://wiki.debian.org/Permissions

https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions

http://www.linux.org/threads/file-permissions-chmod.4094/


Gathering info from this link stackoverflow-image save doesn't work with chmod 777 and from user azerafati and Loek Bergman

if you were to look under /etc/apache/envvars file you will see something like:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Apache is run under the username 'www-data'

'0755' means the file owner can read/write/execute but group and other users cannot write. so in ur terminal, cd to the folder containing your 'images' folder. then type:

find images -type d -exec chmod 0755 {} \;
find images -type f -exec chmod 0755 {} \;
sudo chown -R www-data:www-data images

you must change persmissions first before changing owner. enter your password when prompted. this will make 'www-data' owner of the images folder.

your upload should now work.


For anyone using Ubuntu and receiving this error when loading the page locally, but not on a web hosting service,

I just fixed this by opening up nautilus (sudo nautilus) and right click on the file you're trying to open, click properties > Settings > and give read write to 'everyone else'


had the same problem; my issue was selinux was set to enforcing.

I kept getting the "failed to open stream: Permission denied" error even after chmoding to 777 and making sure all parent folders had execute permissions for the apache user. Turns out my issue was that selinux was set to enforcing (I'm on centos7), this is a devbox so I turned it off.


This can be resolved in resolved with the following steps :

1. $ php artisan cache:clear

2. $ sudo chmod -R 777 storage

3. $ composer dump-autoload

Hope it helps


If you are pulling from git from local to server, you will need to clear cache sometimes because of the view files it gets uploaded with it / or other cached files .

php artisan cache:clear

Sometimes it might just to the trick if your application was working before the git pull


There 2 way to resolve this issues
1. use chmod 777 path-to-your-directory.
if it does not work then
2. simply provide the complete path of your file query.txt.


Here the solution. To copy an img from an URL. this URL: http://url/img.jpg

$image_Url=file_get_contents('http://url/img.jpg');

create the desired path finish the name with .jpg

$file_destino_path="imagenes/my_image.jpg";

file_put_contents($file_destino_path, $image_Url)

Furthermore, as said in file_put_contents man page in php.net, beware of naming issues.

file_put_contents($dir."/file.txt", "hello");

may not work (even though it is correct on syntax), but

file_put_contents("$dir/file.txt", "hello");

works. I experienced this on different php installed servers.

참고URL : https://stackoverflow.com/questions/4917811/file-put-contents-permission-denied

반응형