PHP HTTP_引用程序工作不正常

PHP HTTP_引用程序工作不正常,php,Php,我在学校学习PHP,我制作了一个表单,通过电子邮件发送其内容。多亏了社区的帮助,我的一切都很顺利。然而,我的教授希望我们添加一个脚本来防止垃圾邮件以另一个URL的形式出现,他实际上给了我们代码。问题是,在我将脚本放入他给我们的脚本后,它抛出了一个错误,即使我没有尝试从其他域访问它。我在这里附加了代码,我删除了域,因为我不确定这是否安全,我复制并粘贴了它,比较了字符串…等等,这肯定不是复制错误 $referer = strtolower($_SERVER['HTTP_REFERER']); $

我在学校学习PHP,我制作了一个表单,通过电子邮件发送其内容。多亏了社区的帮助,我的一切都很顺利。然而,我的教授希望我们添加一个脚本来防止垃圾邮件以另一个URL的形式出现,他实际上给了我们代码。问题是,在我将脚本放入他给我们的脚本后,它抛出了一个错误,即使我没有尝试从其他域访问它。我在这里附加了代码,我删除了域,因为我不确定这是否安全,我复制并粘贴了它,比较了字符串…等等,这肯定不是复制错误

 $referer = strtolower($_SERVER['HTTP_REFERER']);
 $this_url = "http://";
 if ($this_url != substr( $referer, 0, 19) ) 
 {
 echo "<h1>Error!</h1><p>You do not have permission to use this script from another   URL.</p>";
 exit;
 }

他犯了错误还是我做错了什么?我将脚本放在邮件函数之前。

您是否验证了$\u服务器['HTTP\u REFERER']是否已实际填充?它并不总是空的。。。文件中的var\u dump$\u SERVER['HTTP\u REFERER']是否可以打印您的$\u SERVER['HTTP\u REFERER']以检查您得到了什么。此外,并非所有的用户代理都会设置此功能,有些代理提供了修改HTTP_REFERER的功能。简言之,它真的不可信。您的比较是使用HTTP_REFERER提供的任何内容的前19个字符。它需要与$this_url完全匹配,包括全部小写,否则它将失败并退出。如果看不到$referer和$this\u url实际上是什么,很难猜测,但其中一个上可能有额外的“/”导致比较总是失败?什么是HTTP\u referer工作不正常?在这种情况下,您应该提交错误报告。当然它是正确的,你只是用错了。