检查PHP中是否存在URL

时间:2010-01-06 16:22:42

标签: php

如果我在PHP中显示URL链接,是否有任何方法可以在用户单击后检查其有效性,以便向用户显示URL损坏或类似内容的自定义消息?

我不是指404页面的错误。我猜错误404仅适用于内部网站页面而非外部链接。如果我错了,请纠正我。

4 个答案:

答案 0 :(得分:4)

我的建议:编写一个PHP批处理作业,定期检查URL(使用curl或fsockopen)并在数据中标记它们。这样,您就知道在之前将URL显示给用户。

答案 1 :(得分:1)

简短的回答是 - 不。

单击链接会导致用户的浏览器从托管的服务器请求资源。您的服务器没有参与。

可以编写一些取消链接正常行为的JavaScript,使用Ajax向服务器发出请求,让服务器上的PHP向第三方网站发出请求以检查响应,响应Ajax请求,然后将location设置为原始URL或错误消息的URL ...但这对用户的性能来说会显着减慢。

如果您担心自己提供的链接被破坏,请定期检查。您可以自动执行此操作(例如使用checklink

答案 2 :(得分:1)

您应该首先使用fsockopen查找链接的响应代码,然后在小于400时显示它。请参阅http://www.scriptol.com/how-to/http-status-code-in-php.php。也许最好的想法是在断开的链接旁边显示警告(可以通过CSS或javascript轻松完成)。

答案 3 :(得分:0)

404适用于未找到的任何资源。如果链接指向一个链接,那么资源不存在的服务器的任务就是为您提供此消息。引用RFC for HTTP Status Codes

  

10.4.5 404 Not Found

     

服务器找不到任何东西   匹配Request-URI。没有   指示是否是   条件是暂时的或永久的。   410(Gone)状态代码应该是   如果服务器知道,通过一些使用   内部可配置机制,   旧资源是永久性的   不可用,没有转发   地址。此状态代码通常是   在服务器不希望时使用   揭示请求的确切原因   被拒绝,或没有其他   回应是适用的。

此外,在PHP完成页面后很长时间内单击浏览器中的链接。 PHP是服务器端,而用户交互在用户的计算机上与此完全隔离。所以,没有办法用PHP捕获点击。

如果您希望捕获点击次数(从技术上讲不是这样),您必须将所有外部链接路由到您自己的网络服务器,该链接可以通过get_headers()预取链接以查看资源是否存在。如果没有,您可以向用户显示您自己的自定义页面。但请记住,这实际上是在做两个HTTP请求。首先是从用户到服务器,然后是从服务器到外部页面,外部链接可能如下所示:

http://www.yourserver.com/external.php?url=example.com/someuri