背景
我想允许我的用户提交崩溃报告并将其通过电子邮件发送给我。
我在用着英国车祸报道使用我修改过的捆绑 PHP 脚本。此代码将崩溃报告连同 POST 一起发送到指定的 URL。
我在运行 Linux 的共享服务器上。我的主要域名是 synapticmishap.co.uk。
问题
当我发送崩溃报告时,在 Cocoa 端,它报告已成功发送,但我没有收到电子邮件。
该代码已在许多其他成熟的 Cocoa 项目中使用,几个月前它就已经开始为我工作了。
这使我得出结论,这些问题与我的网络服务器设置有关,而我对此几乎一无所知。
当我查看日志文件时,我看到如下条目:
IP 已删除- - [10/Jun/2010:09:47:53 +0100] “POST /crashreportform.php HTTP/1.1” 403 74 “-” “UKCrashReporter”
我尝试过的方法
我尝试访问以下页面:http://synapticmishap.co.uk/crashreportform.php通过浏览器。加载正常。
我已确保设置了此 php 脚本的权限,以便任何人都可以执行它。
我尝试从以 root 开始的各个级别的 .htaccess 部分中删除拒绝条目。
我下载了 Firefox 的 URLParams 插件,它允许您模拟 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( "[email protected]", "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。欢迎任何其他想法。
答案1
您的崩溃转储有多大?PHP 有内存限制,可能需要调整才能让您的脚本正常工作。内存限制必须足够大,才能执行脚本 + 任何上传的数据。
答案2
在与我的托管服务提供商多次电子邮件往来之后,发现这里出现了很多问题。
- 他们那边的各种安全设置不正确
- 我不知道必须将文件的权限设置为 644,否则它们将无法执行
另外,我确信还有很多其他内容他们没有详细说明。
总结?问题确实出在托管端,而这是我无能为力或不知道的事情。