2013-03-18 3 views
2

поэтому функция популярного MkDir() в PHP бросает мне предупреждение в следующем коде:Mkdir выдает предупреждение, когда это должно быть bool?

public function check_dir($dir, $create_dir = false) { 
    if (is_dir ($dir)) { 
     return true; 
    } elseif ($create_dir == true) { 
     return mkdir ($dir); 
    } 

    return false; 
} 

Его просто знать, что происходит. Поэтому я не буду объяснять. Но на линии MkDir() я получаю:

Предупреждение: MKDIR(): Разрешение отказано в /var/www/wordpress/wp-content/themes/Aisis-Framework/AisisCore/FileHandling/File.php на линия 70

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

+0

вы можете получить разрешение на запись на вашем сервере? что должно исправить это –

+2

На самом деле, вы должны * отключить предупреждения в режиме «живого» (предполагая «живым» вы имеете в виду «производство»). Вы не должны отключать предупреждения во время * разработки *. – meagar

+0

также вы можете отключить сообщения об ошибках/предупреждениях на дисплее и отправить их в файл журнала вместо –

ответ

0

Вы можете создать собственный обработчик ошибок, который является хорошей практикой в ​​целом: http://www.php.net/set-error-handler

Вы можете использовать это, чтобы обрабатывать любые ошибки PHP в любом случае вы найдете соответствующий. Кроме того, вам придется либо отключить ведение журнала ошибок/предупреждений (как вы говорите, неправдоподобно), либо использовать подавление @ (чего следует избегать в целом, но может быть целесообразным в этом случае.)

Лично я бы согласился с тем, что функция, которая возвращает true/false для указания отказа, уже не должна вызывать предупреждение, если оно не выполняется. Но для вас это PHP.

+0

, так уместно ли в этом случае подавить предупреждение, поскольку я уже имею дело с этим возвратом false? – TheWebs

+0

Я бы сказал, да, в этом случае использование '@' подавления ошибок, вероятно, хорошо. Это просто то, что так легко злоупотребляют/злоупотребляют, что я стараюсь избегать его, если это вообще возможно. Но в этом случае, когда кажется, что сам API работает против вас, мне разумно подавлять его. – Adrian

0

Вы должны включить предупреждение от в производственных серверах ... Но все-таки лучше .. Вы можете проверить разрешения в вашем коде ...

function checkDir($dir, $createDir = false) { 
    if ($createDir === true) { 
     if (is_dir($dir)) 
      return true; 
     $baseDir = dirname($dir); 
     if (! is_dir($baseDir) || ! is_writable($baseDir)) { 
      return false; 
     } 
     return mkdir($dir); 
    } else { 
     return is_dir($dir); 
    } 
    return false; 
} 
Смежные вопросы