Задний план
Я хочу разрешить моим пользователям отправлять отчет о сбое, который будет отправлен мне по электронной почте.
я использую UKCrashReporter с помощью модифицированного мной сценария PHP. Этот код выполняет POST по указанному URL вместе с отчетом о сбое.
Я нахожусь на общем сервере под управлением Linux. Мой основной домен - synapticmishap.co.uk.
Эта проблема
Когда я отправляю отчет о сбое, на стороне Какао он сообщает, что отправил его успешно, но я не получаю электронное письмо.
Код использовался во многих других хорошо зарекомендовавших себя проектах Cocoa, и несколько месяцев назад он работал у меня.
Это приводит меня к выводу, что проблемы связаны с настройкой моего веб-сервера, о чем я почти ничего не знаю.
Когда я смотрю свои файлы журнала, я вижу такие записи:
IP удален - - [10 / июн / 2010: 09: 47: 53 +0100] "POST /crashreportform.php HTTP / 1.1" 403 74 "-" "UKCrashReporter"
Что я пробовал
Я пробовал получить доступ к странице по адресу http://synapticmishap.co.uk/crashreportform.php через браузер. Загружается нормально.
Я убедился, что для этого php-скрипта установлены разрешения, так что любой может его выполнить.
Я пробовал удалять запрещающие записи из раздела .htaccess на разных уровнях, начиная с root.
Я загрузил плагин URLParams для Firefox, который позволяет имитировать POST. Я ввел указанный выше URL и попробовал написать сообщение с параметром «crashlog» и значением «test». Это сгенерировало 200 записей журнала в моем файле журнала - похоже, это сработало, хотя почтового сообщения не было отправлено.
Код
У меня есть следующее на http://synapticmishap.co.uk/crashreportform.php. Я упростил его до самых костей, чтобы заставить его работать.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Crash Report</title>
</head>
<body>
<p>This page contains super special magic which submits a crash report item to me.</p>
<p>Nothing to see here - move along.</p>
<?php
mail( "john@synapticmishap.co.uk", "Crash Report", "\r\n\r\nThis is a test.");
?>
</body>
</html>
Это мой файл .htaccess верхнего уровня:
RewriteEngine on
# -FrontPage-
IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*
<Limit GET POST>
order deny,allow
deny from all
allow from all
</Limit>
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>
Options All -Indexes
RewriteCond %{HTTP_HOST} ^synapticmishap.co.uk$ [OR]
RewriteCond %{HTTP_HOST} ^www.synapticmishap.co.uk$
RewriteCond %{HTTP_HOST} ^lapsusapp.co.uk$ [OR]
RewriteCond %{HTTP_HOST} ^www.lapsusapp.co.uk$
RewriteRule ^/?$ "http\:\/\/synapticmishap\.co\.uk\/synapticmishap\/lapsuspromo\/" [R=301,L]
RewriteCond %{HTTP_HOST} ^jgtutoring.co.uk$ [OR]
RewriteCond %{HTTP_HOST} ^www.jgtutoring.co.uk$
RewriteRule ^/?$ "http\:\/\/synapticmishap\.co\.uk\/tutoring" [R=301,L]
RewriteCond %{HTTP_HOST} ^synapticmishap.co.uk$ [OR]
RewriteCond %{HTTP_HOST} ^www.synapticmishap.co.uk$
RewriteRule ^/?$ "http\:\/\/synapticmishap\.co\.uk\/synapticmishap" [R=301,L]
RewriteCond %{HTTP_HOST} ^jgediting.co.uk$ [OR]
RewriteCond %{HTTP_HOST} ^www.jgediting.co.uk$
RewriteRule ^/?$ "http\:\/\/synapticmishap\.co\.uk\/editing" [R=301,L]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://synapticmishap.co.uk/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://synapticmishap.co.uk$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.synapticmishap.co.uk/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.synapticmishap.co.uk$ [NC]
RewriteCond %{HTTP_REFERER} !^http://synapticmishap.co.uk/synapticmishap/crashreportform.php/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://synapticmishap.co.uk/synapticmishap/crashreportform.php$ [NC]
RewriteRule .*\.(jpg|jpeg|gif|png|bmp)$ - [F,NC]
В файле error_log, похоже, нет никаких ошибок, связанных с этим. Последние несколько записей:
[24-May-2010 03:20:21] WordPress database error MySQL server has gone away for query SELECT FOUND_ROWS() made by require, wp, WP->main, WP->query_posts, WP_Query->query, WP_Query->get_posts
[08-Jun-2010 15:50:04] WordPress database error Duplicate entry '257-1' for key 1 for query INSERT INTO `wp_term_relationships` (`object_id`,`term_taxonomy_id`) VALUES ('257','1') made by wp_xmlrpc_server->wp_xmlrpc_server, IXR_Server->IXR_Server, IXR_Server->serve, IXR_Server->call, wp_xmlrpc_server->mw_editPost, wp_update_post, wp_insert_post, wp_set_post_categories, wp_set_object_terms
Помогите!
Я нахожусь в конце концов с этим, и я нахожусь в очень незнакомом пространстве со всем этим веб-материалом. Я был бы очень признателен за любые мысли людей о том, почему это не работает. Спасибо.
ОБНОВЛЕНИЕ 1
Пару тестовых писем, которые я отправил сегодня утром, пришло - через 4 часа. Учитывая, что почтовый сервер находится в том же ящике, что и тот, который я отправляю, это звучит неправильно. Плюс ошибка все еще регистрируется. Я только что отправил пару тестовых писем с прикрепленными журналами сбоев. Я посмотрю, появятся ли они позже в тот же день, и отправлю ответ.
ОБНОВЛЕНИЕ 2
Письма с журналами сбоев не приходили. Я достиг конца того, что я могу попробовать, не тратя на это бесконечные дни, время, которого у меня просто нет. Я в отчаянии обратился к своему провайдеру веб-хостинга и отправил запрос в службу поддержки, чтобы исправить ситуацию. Это единственное, о чем я теперь могу думать - что они останавливают определенные типы POST. Поскольку я удалил весь PHP-код в файле, и он все еще генерирует ошибки, я думаю, что это что-то в моем формате POST или заголовках, которые не нравятся серверу, а не PHP в скриптах. Любые другие идеи приветствуются.
После долгих писем с моим хостинг-провайдером выяснилось, что здесь много чего пошло не так.
Плюс я уверен, что они не вдавались в подробности и о других вещах.
Резюме? Проблема действительно была на стороне хостинга, и это было то, о чем я либо ничего не мог поделать, либо не знал.
Насколько велика ваша аварийная дамп? PHP имеет ограничения памяти, которые, возможно, потребуется настроить, чтобы ваш скрипт мог работать. Ограничение памяти должно быть достаточно большим для выполнения скрипта + любые загруженные данные.