require_once не работает с читаемым файлом на сайте php wordpress

У меня есть php-скрипт, который очень прост, но требует включения некоторых компонентов Wordpress. Я использовал код с их веб-сайта для большей части этого, но он терпит неудачу всякий раз, когда я пытаюсь вызвать части скриптов require_once. вот соответствующий код:

$fn = dirname(__FILE__) . '/wp-admin/includes/media.php';
if(!file_exists($fn))
{
    echo 'No File';
}
if(!is_readable($fn))
{
    echo 'File is unreadable';
}
require_once $fn;

Интересно, что единственное эхо, которое я получаю, когда require_once раскомментировано, — это полный путь к документу. Файл существует и доступен для чтения. Однако, когда я раскомментирую код require_once, он возвращается с ошибкой 500.

По немного связанному моменту. Какой самый простой способ отладки php. Я еще не нашел ничего, что было бы легко VS (или даже так же легко отлаживать, как Django !!)


person Daniel Casserly    schedule 01.10.2013    source источник


Ответы (2)


PHP имеет различные настройки в php.ini для работы ведения журнала. Вы также можете установить их во время выполнения. Это может быть запись в файл где-то, а не отображение ошибки. Попробуйте:

отчет об ошибках (E_ALL)

Для отладки вашего приложения. Не оставляйте его включенным, когда закончите с ним работать.

person Steve Howard    schedule 01.10.2013
comment
Ничего не делает, и, к сожалению, на этой машине у меня нет доступа к php.ini (общий хост) - person Daniel Casserly; 01.10.2013
comment
Большая часть того, что вы можете установить в php.ini, также может быть установлена ​​с помощью php_flag в .htaccess. В зависимости от вашего веб-хостинга, у них также может быть какой-то способ доступа к php error_log. - person Steve Howard; 01.10.2013
comment
Кроме того, вы проверяете, существует ли dirname(__file__) . '...media.php', а затем пытаетесь включить $_SERVER['DOCUMENT_ROOT'] . '...media.php'. Подумайте о том, чтобы сохранить файл, который вы ищете, как переменную, прежде чем проверять эти вещи, чтобы убедиться, что вы не ошиблись в том, где находится файл. - person Steve Howard; 01.10.2013
comment
Я отредактировал его в переменной, как вы сказали, и результат все тот же. возиться с .htaccess все еще довольно сложно, просто чтобы получить отладочную информацию!?! Я посмотрю на это для проверки ошибок. Спасибо - person Daniel Casserly; 01.10.2013

Вы должны разрабатывать и отлаживать код локально на своей рабочей станции, а не на сервере общего хостинга. На вашей локальной рабочей станции у вас есть доступ к php.ini, журналу ошибок Apache и журналу ошибок PHP. Вы также можете установить параметры отладки для конкретного проекта с помощью файлов .htaccess. Например, вы можете настроить отдельные файлы журнала ошибок PHP для каждого отдельного проекта, над которым вы работаете.

Как отметил @Steve Howard, в php.ini можно изменить множество настроек, чтобы получить более подробные отчеты об ошибках. На самом деле, большинство пакетов LAMP устанавливают разрабатываемую копию файла php.ini, который по сути представляет собой шаблон файла php.ini, оптимизированный для подробных отчетов об ошибках. Подробные отчеты об ошибках — это то, что вам нужно в вашей локальной среде для отладки. Это НЕ то, что нужно в вашей производственной среде, где клиенты и потенциальные хакеры в конечном итоге увидят больше информации, чем должны!

Если вы не знаете, как настроить PHP на своей рабочей станции, взгляните на XAMPP, MAMP, Macports и т. д. Есть много вариантов. Вам не нужно быть супер техническим специалистом, чтобы настроить стек на своем компьютере. После того, как на вашем компьютере будет настроена хорошая среда разработки, вы можете следить за журналом ошибок PHP и журналом Apache.

Мне нравится использовать функцию PHP error_log(). Это позволяет вам выводить пользовательские сообщения в журнал ошибок PHP. Например, если я отлаживаю код и мне нужно знать значение $foo, я могу сделать что-то вроде этого:

<?php
error_log("Foo is: " . print_r($foo, true));

Это намного лучше, чем использование var_dump() или echo для вывода отладочных данных на экран, потому что это не прерывает нормальное выполнение программы или отображение ее уровня представления.

person Neil Girardi    schedule 01.10.2013
comment
Спасибо за ваш вклад. Я сделаю это, сопротивлялся этому всего лишь за небольшой скрипт (попробуйте и держитесь подальше от php, если я могу ;-)) Есть какие-нибудь идеи по основному вопросу вообще? - person Daniel Casserly; 02.10.2013
comment
Судя по тому, что вы описали, похоже, что любой файл, который вы включаете, вызывает неперехваченное исключение, что вызывает ошибку 500. Я просматривал этот файл построчно и искал синтаксические ошибки или любые другие проблемы, которые могут вызвать фатальную ошибку. - person Neil Girardi; 02.10.2013
comment
Это один из стандартных файлов Wordpress. Наверняка в этом нет никаких багов (или я наивен?) - person Daniel Casserly; 02.10.2013
comment
Это не обязательно означает, что в файле есть ошибка. Возможно, файл пытается сделать что-то, что не работает в вашей среде. Например, это может быть попытка доступа к базе данных, которая неправильно настроена. Или он может пытаться записать в каталог, к которому у него нет доступа. - person Neil Girardi; 02.10.2013
comment
Возможно, опубликуйте больше кода, чтобы мы могли видеть, что происходит до и после включения файла. - person Neil Girardi; 02.10.2013
comment
Это первая часть сценария. После этого я просто использую метод из этого файла. Это не имеет значения, так как после этого он все равно не работает. Я собираюсь попробовать сделать это с С#, так как php меня просто злит. Спасибо, в любом случае. - person Daniel Casserly; 02.10.2013