Устранение ошибок в PHP-скрипте с большим временем выполнения - PullRequest
2 голосов
/ 02 января 2012

Я внедрил веб-сканер, который сканирует и получает контент из домена верхнего уровня .edu. Содержание HTML вставляется в таблицы MySQL в качестве исходного кода страницы. Сценарий может продолжаться часами при нормальном подключении к Интернету, когда на сканер подается большое количество исходных URL. Теперь моя проблема в том, что скрипт останавливается после сканирования нескольких ссылок без каких-либо ошибок. Я использовал обработку исключений для обработки «MySQL Server пропал ошибки» и уже устранил много проблем и реализовал, если условия, которые повторяют ошибки, если они встречаются. Однако я не получаю никаких ошибок. Проблема заключается в остановке скрипта, независимо от того, запускаю ли я его в браузере, Eclipse PDT или CLI. Хотя стоит отметить, что количество просканированных ссылок несколько отличается во всех трех методах запуска скрипта. Я изменил php.ini max_execution_time и другие директивы, но это никак не помогает.

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

Должен ли я внести изменения в мои файлы Apache httpd.conf. Если да, то какими должны быть эти настройки ??

Может помочь описание в этих ссылках для моего веб-сканера.

Это код, который извлекает html из URL. Это из simple_html_dom.

function file_get_html($url, $use_include_path = false, $context=null, $offset = -1, $maxLen=-1, $lowercase = true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT)
{
// We DO force the tags to be terminated.
$dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $defaultBRText);
// For sourceforge users: uncomment the next line and comment the retreive_url_contents line 2 lines down if it is not already done.
$contents = file_get_contents($url, $use_include_path, $context, $offset);
// Paperg - use our own mechanism for getting the contents as we want to control the timeout.
//    $contents = retrieve_url_contents($url);
if (empty($contents))
{
    return false;
}
// The second parameter can force the selectors to all be lowercase.
$dom->load($contents, $lowercase, $stripRN);
return $dom;
}

Вот журнал ошибок для следующих ссылок:

И сканер остановился после сканирования по этой ссылке:

[01-Jan-2012 22:54:39] Предупреждение PHP: file_get_contents () [streams.crypto]: этот поток не поддержка SSL / шифрование в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php в строке 72

[01.01.2012 22:54:39] Предупреждение PHP: file_get_contents (http://lms.nust.edu.pk) [function.file-get-contents]: не удалось открыть поток: невозможно подключиться к серверу HTTPS через прокси-сервер в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php в строке 72

[01 января 2012 г. 22:54:41] Предупреждение PHP: file_get_contents (http://www.nust.edu.pk/#) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 400 неверный запрос

в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php на линии 72

... (одна и та же ошибка повторяется дважды) ...

[01 января 2012 г. 22:55:58] Предупреждение PHP: file_get_contents (http://www.nust.edu.pk/usr/oricdic.aspx#ipo) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 400 неверный запрос

в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php на линии 72

[01 января 2012 г. 22:55:58] Предупреждение PHP: file_get_contents (http://www.nust.edu.pk/usr/oricdic.aspx#tto) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 400 неверный запрос

в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php на линии 72

[01.01.2012 22:55:59] Предупреждение PHP: file_get_contents (http://www.nust.edu.pk/usr/oricdic.aspx#ilo) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 400 неверный запрос

в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php на линии 72

[01 января 2012 г. 22:55:59] Предупреждение PHP: file_get_contents (http://www.nust.edu.pk/usr/oricdic.aspx#mco) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 400 неверный запрос

в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php на линии 72

[01 января 2012 г. 22:56:05] Предупреждение PHP: file_get_contents (http://www.nust.edu.pk/#) [function.file-get-contents]:не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 400 неверный запрос

в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php на линии 72

... (та же ошибка повторяется 18 раз) ...

[01.01.2012 22:57:33] Предупреждение PHP: file_get_contents (http://www.nust.edu.pk/#ctl00_SiteMapPath1_SkipLink) [function.file-получить содержание]: не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 400 неверный запрос

в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php на линии 72

[01.01.2012 22:57:33] Примечание PHP: Неопределенная переменная: части в D: \ wamp \ www \ crawler1 \ AbsoluteUrl \ url_to_absolute.php в строке 330

[01.01.2012 22:57:55] Предупреждение PHP: file_get_contents (http://www.harvard.edu/#skip) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 404 Не найдено

в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php на линии 72

[01 января 2012 г. 22:58:21] Предупреждение PHP: file_get_contents (http://www.harvard.edu/admissions-aid#undergrad) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 404 Не найдено

в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php на линии 72

[01.01.2012 22:58:22] Предупреждение PHP: file_get_contents (http://www.harvard.edu/admissions-aid#grad) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 404 Не найдено

в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php на линии 72

[01 января 2012 г. 22:58:24] Предупреждение PHP: file_get_contents (http://www.harvard.edu/admissions-aid#continue) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 404 Не найдено

в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php на линии 72

[01.01.2012 22:58:25] Предупреждение PHP: file_get_contents (http://www.harvard.edu/admissions-aid#summer) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 404 Не найдено

в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php на линии 72

[01 января 2012 г. 23:00:04] Предупреждение PHP: file_get_contents (http://www.harvard.edu/#) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 404 Не найдено

в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php на линии 72

... (та же ошибка повторяется 1 раз) ...

[01 января 2012 г. 23:00:11] Примечание по PHP: неопределенная переменная: части в D: \ wamp \ www \ crawler1 \ AbsoluteUrl \ url_to_absolute.php в строке 330

[01 января 2012 г. 23:00:41] Предупреждение PHP: file_get_contents () [streams.crypto]: этот поток не поддержка SSL / шифрование в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php в строке 72

[01 января 2012 г. 23:00:41] Предупреждение PHP: file_get_contents (http://directory.berkeley.edu) [function.file-get-contents]: не удалось открыть поток: невозможно подключиться к серверу HTTPS через прокси-сервер в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php в строке 72

[01 января 2012 г. 23:00:47] Примечание PHP: Неопределенная переменная: части в D: \ wamp \ www \ crawler1 \ AbsoluteUrl \ url_to_absolute.php в строке 330

[01 января 2012 г. 23:01:53] Предупреждение PHP: file_get_contents () [streams.crypto]: этот поток не поддержка SSL / шифрование в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php в строке 72

[01.01.2012 23:01:53] Предупреждение PHP: file_get_contents (http://students.berkeley.edu/uga/) [function.file-get-contents]: не удалось открыть поток: невозможно подключиться к серверу HTTPS через прокси-сервер в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php в строке 72

[01 января 2012 г. 23:01:57] Предупреждение PHP: file_get_contents () [streams.crypto]: этот поток не поддержка SSL / шифрование в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php в строке 72

[01.01.2012 23:01:57] Предупреждение PHP: file_get_contents (http://publicservice.berkeley.edu/) [function.file-get-contents]:Не удалось открыть поток: не удается подключиться к HTTPS-серверу через прокси-сервер в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php в строке 72

[01-Jan-2012 23:02:00] Предупреждение PHP: file_get_contents () [streams.crypto]: этот поток не поддерживает SSL / шифрование в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php в строке 72

[01 января 2012 г. 23:02:00] Предупреждение PHP: file_get_contents (http://students.berkeley.edu/osl/leadprogs.asp) [function.file-get-contents]: не удалось открыть поток: невозможно подключиться к HTTPS-серверу через прокси в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php в строке 72

[01-Jan-2012 23:02:17] Примечание PHP: Неопределенная переменная: части в D: \ wamp \ www \ crawler1 \ AbsoluteUrl \ url_to_absolute.php в строке 330

[01-Jan-2012 23:02:25] Предупреждение PHP: file_get_contents () [streams.crypto]: этот поток не поддерживает SSL / шифрование в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php on line 72

[01.01.2012 23:02:25] Предупреждение PHP: file_get_contents (http://bearfacts.berkeley.edu/bearfacts) [function.file-get-contents]: не удалось открыть поток: невозможно подключиться к HTTPS-серверу через прокси-сервер в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php в строке 72

[01 января 2012 г. 23:02:28] Предупреждение PHP: file_get_contents () [streams.crypto]: этот поток не поддерживает SSL / шифрование в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php на линии72

[01.01.2012 23:02:28] PHP Предупреждение: file_get_contents (http://career.berkeley.edu/) [function.file-get-contents]: не удалось открыть поток: невозможно подключиться к серверу HTTPSчерез прокси в D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php в строке 72

И это журнал ошибок из php-cgi.exe:

Problem signature:
  Problem Event Name:   APPCRASH
  Application Name: php-cgi.exe
  Application Version:  5.3.8.0
  Application Timestamp:    4e537939
  Fault Module Name:    php5ts.dll
  Fault Module Version: 5.3.8.0
  Fault Module Timestamp:   4e537a04
  Exception Code:   c0000005
  Exception Offset: 0000c793
  OS Version:   6.1.7601.2.1.0.256.48
  Locale ID:    1033
  Additional Information 1: 0a9e
  Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
  Additional Information 3: 0a9e
  Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

Пожалуйста, помогите мне в этом отношении.

1 Ответ

2 голосов
/ 02 января 2012

Вы должны проверить стек вызовов процесса php (если он работает как CGI или CLI) или процесса apache httpd (если он работает как mod_php).

Тогда вы увидите, в каком модуле / процедуре выполнение остановлено. Также вы можете проверить активное соединение TCP / IP, созданное вашим сценарием, возможно, существует какая-то текущая операция ввода-вывода, которая привела к остановке вашего сценария.

Надеюсь, это поможет.

...