업로드 폴더 가 없기 때문에 WordPress 테마에 오류가 발생 하는 Bluehost 와 함께 WordPress를 설치하는 경우 가 있습니다 wp-content/uploads
.
BlueGhost cPanel WordPress 설치 프로그램은 HostGator와 달리이 폴더를 작성하지 않습니다 .
따라서 폴더를 확인하고 다른 방법으로 만드는 코드를 테마에 추가해야합니다.
업로드 폴더 가 없기 때문에 WordPress 테마에 오류가 발생 하는 Bluehost 와 함께 WordPress를 설치하는 경우 가 있습니다 wp-content/uploads
.
BlueGhost cPanel WordPress 설치 프로그램은 HostGator와 달리이 폴더를 작성하지 않습니다 .
따라서 폴더를 확인하고 다른 방법으로 만드는 코드를 테마에 추가해야합니다.
답변:
mkdir을 사용하여 이것을 시도하십시오 :
if (!file_exists('path/to/directory')) {
mkdir('path/to/directory', 0777, true);
}
참고 0777
이미 디렉토리에 대한 기본 모드입니다 여전히 현재의 umask에 의해 수정 될 수 있습니다.
file_exists
— 파일 또는 디렉토리가 있는지 확인 — 파일 is_file
이름이 일반 파일 is_dir
인지를 나타 냅니다 — 파일 이름이 디렉토리인지를 나타
이것이 구글에서 나오기 때문에 좀 더 보편적 인 것입니다. 세부 사항이보다 구체적이지만이 질문의 제목은보다 보편적입니다.
/**
* recursively create a long directory path
*/
function createPath($path) {
if (is_dir($path)) return true;
$prev_path = substr($path, 0, strrpos($path, '/', -2) + 1 );
$return = createPath($prev_path);
return ($return && is_writable($prev_path)) ? mkdir($path) : false;
}
이것은 생성되지 않은 긴 디렉토리 체인으로 경로를 취하고 기존 디렉토리에 도달 할 때까지 하나의 디렉토리로 계속 올라갑니다. 그런 다음 해당 디렉토리에 다음 디렉토리를 작성하고 모든 디렉토리가 작성 될 때까지 계속합니다. 성공하면 true를 반환합니다.
중지 수준을 제공하여 사용자 폴더 나 다른 것을 넘어서거나 권한을 포함하여 실패하면 향상 될 수 있습니다.
다음과 같은 도우미 기능은 어떻습니까?
function makeDir($path)
{
$ret = mkdir($path); // use @mkdir if you want to suppress warnings/errors
return $ret === true || is_dir($path);
}
true
디렉토리가 성공적으로 작성되었거나 이미 존재 false
하고 디렉토리를 작성할 수없는 경우 리턴 됩니다 .
더 나은 대안은이 (경고를주지해야한다)이다 :
function makeDir($path)
{
return is_dir($path) || mkdir($path);
}
@
적절한 is_dir
검사로 교체하면 내지지는 당신의 것입니다 :) 부모 is_writable()
도우미가 방수 도우미 기능 을 수행하는지 확인하는 보너스 포인트입니다 .
재귀 적으로 디렉토리 경로를 작성하십시오.
function makedirs($dirpath, $mode=0777) {
return is_dir($dirpath) || mkdir($dirpath, $mode, true);
}
파이썬의 영감 os.makedirs()
WordPress에는 재귀 적으로 디렉토리 구조를 생성하는 매우 편리한 wp_mkdir_p 함수도 있습니다 .
참고를위한 근원 :-
function wp_mkdir_p( $target ) {
$wrapper = null;
// strip the protocol
if( wp_is_stream( $target ) ) {
list( $wrapper, $target ) = explode( '://', $target, 2 );
}
// from php.net/mkdir user contributed notes
$target = str_replace( '//', '/', $target );
// put the wrapper back on the target
if( $wrapper !== null ) {
$target = $wrapper . '://' . $target;
}
// safe mode fails with a trailing slash under certain PHP versions.
$target = rtrim($target, '/'); // Use rtrim() instead of untrailingslashit to avoid formatting.php dependency.
if ( empty($target) )
$target = '/';
if ( file_exists( $target ) )
return @is_dir( $target );
// We need to find the permissions of the parent folder that exists and inherit that.
$target_parent = dirname( $target );
while ( '.' != $target_parent && ! is_dir( $target_parent ) ) {
$target_parent = dirname( $target_parent );
}
// Get the permission bits.
if ( $stat = @stat( $target_parent ) ) {
$dir_perms = $stat['mode'] & 0007777;
} else {
$dir_perms = 0777;
}
if ( @mkdir( $target, $dir_perms, true ) ) {
// If a umask is set that modifies $dir_perms, we'll have to re-set the $dir_perms correctly with chmod()
if ( $dir_perms != ( $dir_perms & ~umask() ) ) {
$folder_parts = explode( '/', substr( $target, strlen( $target_parent ) + 1 ) );
for ( $i = 1; $i <= count( $folder_parts ); $i++ ) {
@chmod( $target_parent . '/' . implode( '/', array_slice( $folder_parts, 0, $i ) ), $dir_perms );
}
}
return true;
}
return false;
}
로그인 사이트에도 같은 것이 필요합니다. 두 가지 변수로 디렉토리를 만들어야했습니다. $ directory는 사용자 라이센스 번호로 다른 하위 폴더를 만들려는 기본 폴더입니다.
include_once("../include/session.php");
$lnum = $session->lnum; //Users license number from sessions
$directory = uploaded_labels; // Name of directory that folder is being created in
if (!file_exists($directory."/".$lnum)) {
mkdir($directory."/".$lnum, 0777, true);
}
file_exists
VS is_dir
문제 를 피하려면 여기를 참조하십시오.
나는 이것을 시도 하고 디렉토리가 존재하지 않는 경우에만 디렉토리를 만듭니다 . 해당 이름의 파일이 있는지는 중요하지 않습니다.
/* Creates the directory if it does not exist */
$path_to_directory = 'path/to/directory';
if (!file_exists($path_to_directory) && !is_dir($path_to_directory)) {
mkdir($path_to_directory, 0777, true);
}
if (!is_dir('path_directory')) {
@mkdir('path_directory');
}
질문의 환경을 고려합니다.
그리고 인용 : http://php.net/manual/en/function.mkdir.php
bool mkdir (문자열 $ pathname [, int $ mode = 0777 [, bool $ recursive = FALSE [, 자원 $ context]]])
매뉴얼은 유일한 필수 매개 변수는 $pathname
!
따라서 간단히 코딩 할 수 있습니다.
<?php
error_reporting(0);
if(!mkdir('wp-content/uploads')){
// todo
}
?>
매개 변수를 전달하거나 폴더가 있는지 확인하거나 필요하지 않은 경우 모드 매개 변수를 전달할 필요도 없습니다. 다음과 같은 이유로 :
mode
PHP를 실행 하는 Windows 호스팅 에서는 무시됩니다 .mkdir
폴더가 존재하면 명령이 이미 검사기에서 빌드되었습니다. 따라서 반환 값 만 확인해야합니다. True | False; 오류가 아니라 경고 만 있으며 경고는 기본적으로 서버 호스팅에서 비활성화되어 있습니다.이것은 질문을 조사하고 더 좋고 가장 최적의 솔루션을 요구하지 않는 또 다른 방법입니다.
PHP7, 프로덕션 서버, Linux에서 테스트
$upload = wp_upload_dir();
$upload_dir = $upload['basedir'];
$upload_dir = $upload_dir . '/newfolder';
if (! is_dir($upload_dir)) {
mkdir( $upload_dir, 0700 );
}
우리는 항상 코드를 모듈화해야하고 아래에서 같은 검사를 작성했습니다 ... 먼저 디렉토리를 확인합니다. 디렉토리가 없으면 디렉토리를 만듭니다.
$boolDirPresents = $this->CheckDir($DirectoryName);
if (!$boolDirPresents) {
$boolCreateDirectory = $this->CreateDirectory($DirectoryName);
if ($boolCreateDirectory) {
echo "Created successfully";
}
}
function CheckDir($DirName) {
if (file_exists($DirName)) {
echo "Dir Exists<br>";
return true;
} else {
echo "Dir Not Absent<br>";
return false;
}
}
function CreateDirectory($DirName) {
if (mkdir($DirName, 0777)) {
return true;
} else {
return false;
}
}
먼저 디렉토리가 존재하는지 확인해야합니다 file_exists('path_to_directory')
그런 다음 mkdir(path_to_directory)
디렉토리를 만드는 데 사용하십시오.
mkdir( string $pathname [, int $mode = 0777 [, bool $recursive = FALSE [, resource $context ]]] ) : bool
전체 코드는 다음과 같습니다.
$structure = './depth1/depth2/depth3/';
if (!file_exists($structure)) {
mkdir($structure);
}
여기 요
if (!is_dir('path/to/directory')) {
if (!mkdir('path/to/directory', 0777, true) && !is_dir('path/to/directory')) {
throw new \RuntimeException(sprintf('Directory "%s" was not created', 'path/to/directory'));
}
}
수락 된 답변은 효과가 있지만 권한 때문에 올바른 솔루션이 아닙니다. 0777 권한은 모든 사람이 디렉토리에 액세스 / 읽기 / 쓰기를 할 수있게합니다. 이것은 우리가 웹 서버에서 디렉토리를 업로드하기 위해 원하는 것이 아닙니다. 다음은 제안 된 정확하고 완전한 솔루션입니다.
$path_to_directory = 'path/to/directory';
if (!file_exists($path_to_directory) && !is_dir($path_to_directory)) {
mkdir($path_to_directory, 0644, true);
}
0644는 일반적으로 서버에서 업로드되는 것을 원하지 않기 때문에 업로드 디렉토리에 대한 올바른 권한입니다.
true는 재귀 속성을 true 또는 false로 설정하기위한 세 번째 매개 변수입니다. 경로 이름에 지정된 중첩 디렉토리를 만들 수 있습니다.
if (!file_exists('path/to/directory')) { mkdir('path/to/directory', 0777, true); }