Имеем 2 файла:
test1.php:
<?php
function t2h($txt) {
return htmlspecialchars($txt, ENT_QUOTES, 'UTF-8');
}
// Error handling code
function exceptionHandler($e) {
echo "<p><font color=\"red\"><pre>Error:<br />".t2h(print_r($e, true))."</pre></font></p>";
exit;
}
set_exception_handler("exceptionHandler");
function exceptionErrorHandler($errno, $errstr, $errfile, $errline) {
throw new ErrorException($errstr, $errno, 1, $errfile, $errline);
}
set_error_handler("exceptionErrorHandler");
if (!session_id()) session_start();
try {
$mbox = @ imap_open('{imap.gmail.com:993/imap/ssl}', 'sa43sosafoei9asdf9ds@gmail.comm', '9jfoihoasjdf');
} catch (Exception $e) {
echo "Exception!";
}
?>
test2.php:
<?php
if (!session_id()) session_start();
?>
OK
Username/Password для imap_open заведомо неправильные - пытаюсь написать скрипт проверяющий их правильность перед добавлением в DB. Начальник денег на переделку похапешной поделки в python не выделил, так что продолжаем секс с ущербным недоязыком.
Для начала загружаем test1.php (for ex.: http://localhost/test1.php). Скрипт вроде бы завершился, правда выдал какие то непонятно откуда взявшиеся сообщения не смотря на try ... catch и !оператор сокрытия ошибок! (типичный пример ущербности) @. Это проблема #1: язык не имеет адекватной структуры где все ошибки выдаются в виде exception'а который можно поймать или хотя бы где ф-ции возвращают значение сигнализирующее об ошибке которое опять же можно обработать - даже библиотеки для низкоуровневых языков такое делают. Какие же ламеры писали грёбаный похапэ что он у них просто печатает об ошибке??? Даже на уроках информатики школьников за это ругают!!!
Но это ещё только цветочки. Сообщение можно убрать разными способами.
Выше я писал что «скрипт вроде бы завершился». Но как выясняется завершился он каким то странным образом, либо завершился не до конца. К такому выводу можно придти если попробовать теперь загрузить test2.php (for ex.: http://localhost/test2.php). Браузер выдаст сообщение «Connecting...» и остановится на этом этапе. Connection'а не будет т.к. PHP лочит файлы сессии и оба файла юзают одну и ту же сессию. И, внимание: первый казалось бы завершившийся скрипт либо не разлочил файл сессии либо не завершился до конца!!! в связи с чем второй файл будет ждать разлочки сессии чего похоже никогда не произойдёт. Теперь единственной возможностью загрузить хоть что то использующее эту сессию является перезапуск apache!!!
Что же делать? Закрывать сессию перед этим участком кода? Это поможет если скрипт завершился но забыл закрыть сессию. А что если скрипт остался в памяти? А похоже так оно и есть в связи с тем что перезапуск apache убивает процесс и разлочивает файл.
Мой вердикт: разработчиков убогой поделки расстрелять!!!