如果我在PHP中显示URL链接,是否有任何方法可以在用户单击后检查其有效性,以便向用户显示URL损坏或类似内容的自定义消息?
我不是指404页面的错误。我猜错误404仅适用于内部网站页面而非外部链接。如果我错了,请纠正我。
答案 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