PHP mkdir 함수로 디렉토리를 만들려고하는데 다음과 같은 오류가 발생합니다 Warning: mkdir() [function.mkdir]: Permission denied in ...
.. 문제를 해결하는 방법?
PHP mkdir 함수로 디렉토리를 만들려고하는데 다음과 같은 오류가 발생합니다 Warning: mkdir() [function.mkdir]: Permission denied in ...
.. 문제를 해결하는 방법?
답변:
나는 이것이 오래된 스레드라는 것을 알고 있지만 더 나은 대답이 필요합니다. 권한을 777로 설정할 필요가 없습니다. 이는 세계에 대한 읽기 및 쓰기 액세스를 제공하므로 보안 문제입니다. 아파치 사용자에게 디렉토리에 대한 읽기 / 쓰기 권한이 없을 수 있습니다.
Ubuntu에서 수행하는 작업은 다음과 같습니다.
모든 파일이 Apache 그룹 및 사용자의 소유인지 확인하십시오. Ubuntu에서는 www-data 그룹 및 사용자입니다.
chown -R www-data:www-data /path/to/webserver/www
다음으로 www-data 그룹의 모든 구성원이 파일을 읽고 쓸 수 있습니다.
chmod -R g+rw /path/to/webserver/www
PHP mkdir()
함수는 이제 오류를 반환하지 않고 작동합니다.
/opt/lampp/htdocs/www/my-app/public/uploads
.. 기본적으로 로그인 한 모든 사용자가 업로드 폴더에 파일을 업로드하고 사진을 저장할 앨범 폴더 (php로 수행됨)를 만드는 것입니다. ..
미래에 구글을 통해 이것을 찾는 사람들을위한 늦은 답변. 나는 같은 문제에 부딪쳤다.
참고 : 저는 MAC OSX LION을 사용하고 있습니다.
아파치가 사용자 "_www"로 실행되고 있으며 파일을 편집 할 수있는 권한이 없습니다. php를 통해 작동하는 파일 시스템 기능이 없음을 알 수 있습니다.
어떻게 고치는 지:
Finder 창을 열고 메뉴 모음에서 이동> 폴더로 이동> / private / etc / apache2를 선택합니다.
이제 httpd.conf를 엽니 다.
찾기:
User _www
Group _www
사용자 이름 변경 :
User <YOUR LOGIN USERNAME>
이제 다음 양식 터미널을 실행하여 아파치를 다시 시작하십시오.
sudo apachectl -k restart
그래도 작동하지 않으면 위의 작업을 수행하기 전에 다음을 수행합니다. 관련이있을 수 있습니다.
터미널을 열고 다음 명령을 실행합니다. (내 웹 서버 파일은 / Library / WebServer / www에 있습니다. 웹 사이트 위치에 따라 변경)
sudo chmod 775 /Library/WebServer/www
sudo chmod 775 /Library/WebServer/www/*
_www
사용자와 Apache에 대한 그룹을 만드는 것입니다. 새 그룹을 만들고라고 말하고 trusted
자신과 그 _www
안에 넣으십시오 . 그런 다음 서버 문서 디렉토리에있는 모든 파일의 그룹 소유자를 신뢰할 수있게 만드십시오. 마지막으로 chmod g+rwx
Apache가 액세스해야하는 파일에만 필요한 작업을 수행 하여 trusted
그룹이 파일을 편집 할 수있는 권한을 갖도록 합니다.
링크 전용 답변은 StackOverflow에서 모범 사례로 간주되지 않지만 여기에 제공된 조언은 일반적으로 후속 조치를 취해서는 안됩니다.
비슷한 질문에 대한이 훌륭한 답변으로 되돌리고 싶습니다 . 나는 인용한다 :
777 사용 제안을 중지하십시오. 모든 사람이 파일을 쓸 수있게 만들고 있습니다. 이는 권한 시스템이 설계된 모든 보안을 잃는다는 것을 의미합니다. 이것을 제안한다면, 잘못 구성된 웹 서버에 미칠 수있는 결과에 대해 생각해보십시오. 파일을 덮어 쓰면 웹 사이트를 "해킹"하기가 매우 쉬워 질 것입니다. 그러지 마십시오.
이 스레드가 오래되었다는 것을 알고 있지만 언젠가 누군가에게 도움이 될 것입니다.
PHP가 mkdir ()에 대해 "Permission denied"라고 말하는 문제-잘못된 URL 경로. 따라서 문제를 해결하려면 올바른 경로를 얻기 만하면됩니다. 나는 이렇게했다 :
<?php
$root = $_SERVER["DOCUMENT_ROOT"];
$dir = $root . '/somefolder/';
if( !file_exists($dir) ) {
mkdir($dir, 0755, true);
}
?>
디렉토리를 만들려면 파일 시스템 권한이 있어야합니다.
예 : Ubuntu 10.04에서 apache (php)는 사용자로 실행됩니다 : www-data in group : www-data
즉, 사용자 www-data는 디렉토리를 생성하기 위해 액세스해야합니다.
www-data 사용자가 되려면 'su www-data'를 사용하여 직접 시도 할 수 있습니다.
빠른 수정으로 다음을 수행 할 수 있습니다. sudo chmod 777 my_parent_dir
chmod 0777
세계에 대한 읽기 및 쓰기 액세스 권한을 부여합니다! 그런 조언을해서는 안됩니다. 그러나 사용자 그룹의 조언은 현재 최고입니다. :)
당신이 할 수있는 다른 일은 다음으로 이동하는 것입니다 : / etc / sudoers
해당 사용자에게 권한을 부여하는 다음 줄을 추가합니다. www-data ALL = (ALL : ALL) ALL Why www-data? 이것은 아파치가이 사용자 이름으로 실행되기 때문입니다.
사용자가 다른 경우 사용자 이름 ALL = (ALL : ALL) ALL을 시도하십시오.
이것은 나를 위해 일했습니다.
sudoers
직접 편집하지 말고 루트로 로그인하고 te visudo
명령을 사용하십시오 .이 명령은 잘못된 편집을 방지하기 위해 변경 사항을 확인합니다.이 명령은 sudoers 파일이로드 될 때 구문 분석 오류를 일으킬 수 있습니다. 무엇이든 변경)
방금이 문제가 발생했습니다. 지금 당장 제공 할 수있는 최선의 해결책은 다음과 같습니다. 코드를 포함하지 않았음에도 불구하고
재귀 명령을 사용하여 하위 폴더를 만드는 경우 mkdir 명령에 0755 (시작에 0을 포함해야 함)를 입력하는 것을 잊지 마십시오. 예 :
if(!file_exists($output)){
if (!mkdir($output, 0755, true)) {//0755
die('Failed to create folders...');
}
}
이것은 또한 지금 저에게 효과적입니다.
LINUX를 사용하는 경우 일부 배포판에서는 다를 수 있으므로 먼저 apache의 사용자를 확인하겠습니다.
egrep -i '^user|^group' /etc/httpd/conf/httpd.conf
결과가 "http"라고 가정 해 보겠습니다. 다음을 수행하십시오. path_to_folder를 폴더 경로로 변경하십시오.
chown -R http:http path_to_folder
chmod -R g+rw path_to_folder
umask의 문제가 아닌지 확인하십시오.
if (!function_exists('mkdir_r')) {
/**
* create directory recursively
* @param $dirName
* @param int $rights
* @param string $dir_separator
* @return bool
*/
function mkdir_r($dirName, $rights = 0744, $dir_separator = DIRECTORY_SEPARATOR) {
$dirs = explode($dir_separator, $dirName);
$dir = '';
$created = false;
foreach ($dirs as $part) {
$dir .= $part . $dir_separator;
if (!is_dir($dir) && strlen($dir) > 0) {
$created = mkdir($dir, $rights);
}
}
return $created;
}
}
if (!function_exists('ensure_dir')) {
/**
* ensure directory exist if not create
* @param $dir_path
* @param int $mode
* @param bool $use_mask
* @param int $mask
* @return bool
*/
function ensure_dir($dir_path, $mode = 0744, $use_mask = true, $mask = 0002) {
// set mask
$old_mask = $use_mask && $mask != null
? umask($mask)
: null;
try {
return is_dir($dir_path) || mkdir_r($dir_path, $mode);
} finally {
if ($use_mask && $old_mask != null) {
// restore original
umask($old_mask);
}
}
}
}
FTP 서버를 설치 한 후에 sudo apt-get install vsftpd
는 구성해야합니다. 쓰기 액세스를 활성화하려면 /etc/vsftpd.conf
파일 을 편집 하고 주석 처리를 제거해야합니다.
#write_enable=YES
줄, 그래서 읽어야합니다
write_enable=YES
파일 다시 시작 저장 vsftpd
과를 sudo service vsftpd restart
.
다른 구성 옵션에 대해서는 이 문서를 참조 하거나man vsftpd.conf
이 오류는 잘못된 경로를 사용하는 경우 발생합니다.
예 :
우분투 시스템을 사용하고 있으며 프로젝트 폴더 이름은 'myproject'입니다.
myproject / public / report 디렉토리가 있고라는 새 폴더를 만들고 싶다고 가정 합니다. orders 합니다.
그런 다음 내 프로젝트가 존재하는 전체 경로가 필요합니다. PWD 명령으로 경로를 얻을 수 있습니다.
따라서 내 루트 경로는 = '/ home / htdocs / myproject /'입니다.
$ dir = '/ home / htdocs / myproject / public / report / Orders';
if (!is_dir($dir)) {
mkdir($dir, 0775, true);
}
그것은 당신을 위해 작동합니다! 즐겨 !!