IT story

move_uploaded_file은 내가 수행 한 모든 구성 후에 "스트림 열기 실패 : 권한 거부"오류를 발생시킵니다.

hot-time 2020. 6. 24. 07:30
반응형

move_uploaded_file은 내가 수행 한 모든 구성 후에 "스트림 열기 실패 : 권한 거부"오류를 발생시킵니다.


CentOS에서 Apache 2.2 및 PHP 5.3으로 업로드 디렉토리를 구성하려고 할 때이 오류가 계속 발생합니다.

php.ini에서 :

upload_tmp_dir = /var/www/html/mysite/tmp_file_upload/

httpd.conf에서 :

Directory /var/www/html/mysite/tmp_file_upload/>
    Options  -Indexes
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
<Directory /var/www/html/mysite/images/>
                Options -Indexes
</Directory>

CentOS 디렉토리 권한 :

drwxrwxr-x 2 root root 4096 Nov 11 10:01 images
drwxr-xr-x 2 root root 4096 Nov 12 04:54 tmp_file_upload

내가하는 일에 관계없이 파일을 업로드 할 때 PHP 에서이 오류가 계속 발생합니다.

경고 : move_uploaded_file (images / robot.jpg) : 스트림을 열지 못했습니다 : 78 행의 /var/www/html/mysite/process.php에서 권한이 거부되었습니다.

경고 : move_uploaded_file () : 78 행의 /var/www/html/mysite/process.php에서 '/ tmp / phpsKD2Qm'을 'images / robot.jpg'로 이동할 수 없습니다

보시다시피 업로드 파일과 관련하여 php.ini 파일에서 구성을 취하지 않았습니다.

내가 여기서 뭘 잘못하고 있니?


때문입니다 imagestmp_file_upload들만 쓸 수있는 root사용자. 업로드가 작동하려면 해당 폴더의 소유자를 httpd 프로세스 소유자와 동일하게 만들거나 전역으로 쓸 수 있도록해야합니다 (나쁜 방법).

  1. 아파치 프로세스 소유자를 확인하십시오 $ps aux | grep httpd. 첫 번째 열은 일반적으로 소유자입니다.nobody
  2. 의 소유자를 변경 images하고 tmp_file_upload될 수 nobody또는 당신이 무엇을 1 단계에서 발견 소유자.

    $sudo chown nobody /var/www/html/mysite/images/
    
    $sudo chown nobody /var/www/html/mysite/tmp_file_upload/
    
  3. Chmod imagestmp_file_upload이제 필요한 경우 소유자가 쓸 수 있습니다 (이미 이미 준비한 것 같습니다). @Dmitry Teplyakov 답변에 언급되어 있습니다.

    $ sudo chmod -R 0755 /var/www/html/mysite/images/
    
    $ sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/
    
  4. 이 동작이 발생한 이유에 대한 자세한 내용은 매뉴얼 http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir을 확인하십시오 open_basedir. 지시어에 대해서도 설명 합니다.


이 스크립트를 실행하여 Apache 프로세스 소유자를 찾을 수도 있습니다.

<?php echo exec('whoami'); ?>

그런 다음 대상 디렉토리의 소유자를 가지고있는 것으로 변경하십시오. 다음 명령을 사용하십시오.

chown user destination_dir

그런 다음 명령을 사용하십시오.

chmod 755 destination_dir

대상 디렉토리 권한을 변경합니다.


Mac OS X을 사용하는 경우 파일 루트 또는 웹 사이트 폴더로 이동하십시오.

그런 다음 마우스 오른쪽 버튼으로 클릭하고 정보를 얻고 맨 아래로 이동 ( 공유 및 권한 )하고 열어서 모든 읽기 전용을 읽고 쓰도록 변경하십시오. 자물쇠를 열고 설정 아이콘으로 이동 한 다음 동봉 된 항목에 적용선택 하십시오 .


이 폴더에 대한 권한 변경

# chmod -R 0755 /var/www/html/mysite/images/


나는 이것을 이전 제안에 추가하고 싶었다. SELinux가 활성화 된 Linux 버전을 사용하는 경우 쉘에서도이를 실행해야합니다.

chcon -R --type httpd_sys_rw_content_t /path/to/your/directory

웹 서버 사용자에게 그룹 소유자 또는 디렉토리 소유자 변경을 통해 권한을 부여하는 것과 함께.


이것은 나를 위해 일했습니다.

sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rwX /var/www

그런 다음 로그 아웃하거나 재부팅하십시오.

SELinux불만이 있으면 다음을 시도하십시오

sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www(/.*)?'
sudo restorecon -Rv '/var/www(/.*)?'

이미 작곡가를 성공적으로 실행 한 후에도이 관련 문제가 발생했습니다. 작곡가를 업데이트했으며 실행 composer install하거나 php composer.phar install얻었을 :

... 스트림을 열지 못했습니다 : 권한이 거부되었습니다 ...

폴더에 대한 권한 변경에 대한 이전 답변이 효과가 있다는 것이 많은 연구 후에 밝혀졌습니다. 그들은 지금 약간 다른 디렉토리입니다.

설치시 OS X에서 캐시 파일이에 /Users/[USER]/.composer/cache있으며 캐시 파일이 루트가 소유했기 때문에 문제가 발생했습니다. '.composer'의 소유권을 사용자에게 재귀 적으로 변경하면 문제가 해결되었습니다.

이것이 내가 한 일입니다.

sudo chown -R [USER] cache

Then I ran the composer install again and voila!


Try this:

  1. open /etc/apache2/envvars

    sudo gedit /etc/apache2/envvars
    
  2. replace www-data with your your_username

    "export APACHE_RUN_USER=www-data" 
    

    replace with

    export APACHE_RUN_USER='your_username' 
    

This problem happens when the apache user (www-data) does not have permission to write in the folder. To solver this problem you need to put the user inside the group www-data.

I just made this:

Execute this php code <?php echo exec('whoami'); ?> to discover the user used by apache. After, execute the commands in the terminal:

user@machine:/# cd /var/www/html

user@machine:/var/www/html# ls -l

It will return something like this:

total of files

drwxr-xr-x 7 user group size date folder

I kept the user but changed the group to www-data

chown -R user:www-data yourprojectfoldername

chmod 775 yourprojectfoldername

Just change the permission of tmp_file_upload to 755 Following is the command chmod -R 755 tmp_file_upload


Try this

find /var/www/html/mysite/images/ -type f -print0 | xargs -0 chmod -v 664


The solution is so easy. Only right click the IMAGE (destination) folder, go to properties, click the permission tab, and change others access to Create and delete files.

참고URL : https://stackoverflow.com/questions/8103860/move-uploaded-file-gives-failed-to-open-stream-permission-denied-error-after

반응형