Один файл PHP не выполняется, другие работают нормально (с помощью функции php "mkdir") - PullRequest
1 голос
/ 30 января 2012

ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: ИСПРАВЛЕНО, но не решено.Не уверен, что происходит, но я создал новый файл php с нуля, и это сработало.Очень странно.

Редактировать: у меня установлены разрешения 777 для всех связанных папок

Редактировать 2: Добавлены кавычки в строки

Редактировать 3: Удалено / передletter

Редактировать 4:

<?php mkdir("letter/testfolder",0777); ?>

отлично работал и создал папку testfolder в letter.


Я не совсем уверенчто я тут делаю не такУ меня есть много файлов php, которые работают сами по себе, но когда я пытаюсь выполнить этот конкретный файл, единственный, который использует mkdir, он не работает и вместо этого загружает файлы index.php.Я предполагаю, что это из-за плохого кодирования?

Код

<?php
$letters = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

foreach($letters as $letter) {
    mkdir("letter/$letter",0755);
    echo $letter;
    echo " created";
}
?>

Идея состоит в том, чтобы создать 26 папок, по одной для каждой буквы алфавита, внутри папки letter.

Я чувствую, что ответ очень очевиден, но часто я вижу свои собственные очевидные ошибки, которые мне труднее всего увидеть.

Ответы [ 4 ]

2 голосов
/ 30 января 2012
mkdir("/letter/$letter",0755);

Пытается создать папку в папке / letter /, расположенной в корне файловой системы.У вас есть это там?Если вы пытаетесь работать с подпапками текущего рабочего каталога, используйте

mkdir("letter/$letter",0755);

и убедитесь, что папка letter уже существует.

ps: The php file is at the root of the disk and so is the folder letter - очень странная конфигурация,Вы уверены, что говорите о корне диска, а не о корне сайта?Включить вывод всех ошибок в php.

Если вы хотите создать папку в корне сайта, используйте

 mkdir($_SERVER['DOCUMENT_ROOT'] . "/letter/$letter",0755);

Но это верно только в том случае, если вы можете запустить скрипт.Ваша фраза о it loads the index.php означает, что у вас есть что-то еще в httpd.conf (скажем, ваш сервер Apache) вашего сервера или в .htaccess, перенаправляющем все запросы в файл index.php.Если вы используете какую-либо CMS на сайте, это может быть возможно.

1 голос
/ 30 января 2012

Есть несколько вещей, которые вы должны сделать:

  1. Включить отчеты об ошибках
  2. Проверьте результат ваших mkdir звонков.

Как только вы сделаете эти две вещи, я предполагаю, что вы точно поймете, почему у вас ничего не получается:

// Useful in debug / development environments (disable in production)
error_reporting(E_ALL);

foreach ($letters as $letter)
{
    if(mkdir("/letter/$letter",0755))
        echo "$letter created\n";
    else
        echo "Failed to create $letter!\n";
}
1 голос
/ 30 января 2012

Вам нужно поставить . перед путем.

<?php
error_reporting(E_ALL); //<<Always a good idea
foreach(range('a','z') as $letter){

mkdir("./letter/$letter",0755);
echo $letter.' created';
}
?>
0 голосов
/ 12 марта 2013

Я застрял с этим в течение долгого времени, возможно, это была ваша проблема.если вы используете SELinux, существует дополнительный уровень разрешений, называемый «контекст безопасности», который вы можете увидеть с помощью ls -alZ.используйте что-то вроде chcon system_u:object_r:httpd_sys_content_t:s0 public_HTML

, поэтому будет иметь смысл, что один и тот же файл в разных каталогах будет работать или не работать в зависимости от этого дополнительного слоя.НТН

...