programing

move_movel_file은 "오픈 스트림에 대한 접근:권한 거부" 오류

bestcode 2023. 1. 31. 20:49
반응형

move_movel_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): 스트림을 열지 못했습니다./var/www/html/mysite/process에서 권한이 거부되었습니다.78행의 php

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

보시다시피 업로드 파일에 관한 설정을 php.ini 파일에서 가져온 적이 없습니다.

내가 여기서 뭘 잘못하고 있는 거지?

그 이유는images그리고.tmp_file_upload에 의해서만 쓸 수 있다.root사용자. 업로드가 작동하려면 이러한 폴더의 소유자를 httpd 프로세스 소유자와 같게 하거나 전역 쓰기 가능 상태로 만들어야 합니다(부정 관행).

  1. Apache 프로세스 소유자 확인:$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. Chmodimages그리고.tmp_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

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

이건 나한테 효과가 있었어.

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(/.*)?'

Mac OS X가 있는 경우 웹 사이트의 파일 루트 또는 폴더로 이동합니다.

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

나는 이것을 이전 제안들에 추가하고 싶었다.SELinux가 네이블로 되어 있는 Linux 버전을 사용하는 경우 셸에서도 다음 작업을 수행해야 합니다.

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

그룹 또는 디렉토리 소유자 변경을 통해 웹 서버 사용자에게 권한을 부여합니다.

이 폴더에 대한 사용 권한 변경

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

이것을 시험해 보세요.

  1. /etc/pars2/envars를 엽니다.

    sudo gedit /etc/apache2/envvars
    
  2. www-data당신의 것과 함께your_username

    "export APACHE_RUN_USER=www-data" 
    

    로 대체하다.

    export APACHE_RUN_USER='your_username' 
    

저는 이미 작곡가를 성공적으로 운영했는데도 이와 관련된 문제에 부딪혔습니다.만, ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★composer install ★★★★★★★★★★★★★★★★★」php composer.phar install

...열린 스트림:권한이 거부되었습니다...

많은 조사 결과 폴더 권한 변경에 대한 이전 답변이 효과가 있음이 밝혀졌습니다.그것들은 이제 조금 다른 디렉토리일 뿐이다.

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

제가 한 일은 다음과 같습니다.

sudo chown -R [USER] cache

그리고 작곡가 설치를 다시 실행한 후 voila!

이 문제는 Apache 사용자(www-data)에게 폴더에 쓸 수 있는 권한이 없는 경우에 발생합니다.이 문제를 해결하려면 사용자를 www-data 그룹에 포함시켜야 합니다.

내가 방금 만든 거야

코드 php 를 합니다.<?php echo exec('whoami'); ?>아파치그런 다음 단말기에서 다음 명령을 수행합니다.

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

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

다음과 같이 반환됩니다.

total of files

drwxr-xr-x 7 user group size date folder

사용자를 유지했지만 그룹을 www-data로 변경했습니다.

chown -R user:www-data yourprojectfoldername

chmod 775 yourprojectfoldername

해결책은 매우 쉽다.IMAGE(대상) 폴더를 마우스 오른쪽 버튼으로 클릭하고 속성으로 이동한 다음 권한 탭을 클릭한 다음 다른 액세스 권한을 파일 생성삭제로 변경하십시오.

tmp_file_upload 권한을 755로 변경하기만 하면 됩니다.다음은 chmod - R 755 tmp_file_upload 명령어입니다.

이거 드셔보세요

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

이라면 일어날 수 있는 일이다SELinux이네이블입니다.을 무효로 하다/etc/selinux/config「」를 SELINUX=disabled서버를 재기동합니다.

나는 위의 모든 해결책을 시도해 보았지만, 다음과 같이 나의 문제를 해결했다.

chcon -R -t httpd_sys_rw_content_t your_file_directory

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

반응형