Скрипт php работает как зависает запланированная задача - помогите! - PullRequest
0 голосов
/ 24 июня 2009

Я создал скрипт php, который запускается из командной строки. Он открывает соединение с учетной записью электронной почты pop3, загружает все электронные письма, записывает их в базу данных и удаляет их после загрузки. У меня этот скрипт вызывается из командной строки с помощью файла bat. в свою очередь я создал запланированное задание, которое вызывает файл bat каждые 5 минут. Дело в том, что я установил время на ноль из-за того, что иногда могут быть электронные письма с большими вложениями, и скрипт на самом деле загружает вложения и сохраняет их как необработанные файлы в автономном режиме, а время ожидания отсутствует, так что скрипт не умирает во время загрузки.

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

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

Как мне это сделать: (

Ответы [ 2 ]

0 голосов
/ 27 апреля 2011

Я столкнулся с этой проблемой недавно для тех, кто ищет ответ. У меня был планировщик задач, вызывающий файл .php напрямую. Он зависнет и никогда ничего не вернет.

Я обнаружил, что запуск firefox.exe и отправка URL-адреса в качестве параметра - это правильный способ запуска файла .php через диспетчер задач.

firefox.exe "http://host/dir/file.php"

0 голосов
/ 24 июня 2009

Значение времени ожидания можно установить с помощью socket_set_timeout(), если вы используете сокеты напрямую. Вы можете посмотреть этот другой вопрос для деталей. Если вы используете библиотеку, вы должны проверить ее документы. Но я бы предпочел проверить, действительно ли это - это проблема тайм-аута. Зарегистрируйте ошибки php в файл , и вы сможете просмотреть их все. Установите для max_execution_time какое-либо приемлемое значение (например, 10 минут) и проверяйте журналы при повторном зависании, если это всегда та же строка, где происходит сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...