使用 ajax 时使用 php file_get_contents() 不起作用
Posted
技术标签:
【中文标题】使用 ajax 时使用 php file_get_contents() 不起作用【英文标题】:Using php file_get_contents() does not work when using ajax 【发布时间】:2015-12-09 22:15:55 【问题描述】:更新:这个问题已经解决,我的问题是一个错字。我所做的事情的概念是正确的。
当我第一次显示我的页面时,我会检查图像是否存在。打印出来:
if (@file_get_contents($url) != false)
// show URL
else
// Show Placeholder Image
当我第一次加载我的页面并且用 html 编写 php 时,此代码有效。
但在其他情况下,当我执行 jQuery .post
或 .get
调用(基本上是 ajax)时,执行上述文件检查总是失败。我已经打印出 URL,它指向正确的文件(我可以通过取消抑制错误来做到这一点)。现在,url 是一个不同的域,而不是被调用的原始文件,所以不确定它是否是一个跨域问题(它也是一个属于我的网站,所以我可以完全访问这些文件)。
此代码是否由于 ajax 而无法正常工作?跨域?还有什么?
另外,我试过file_exists
、getimagesize
和cUrl
也无济于事。
编辑:
当错误没有被抑制时,这是我的消息:
警告:
file_get_contents(http://www.---.---)
[function.file-get-contents]:打开流失败:HTTP 请求失败! HTTP/1.1 404 Not Found in --- 第 352 行
【问题讨论】:
你的 ajax 脚本和这个脚本在同一个文件夹中吗? 我不确定您所说的“这个”是什么意思。我的index.php
代码工作的地方在主文件夹中。我的 ajax 位于名为 js/myscript.js
的根目录下的文件夹中。 jQuery ajax 调用根目录中的文件(index.php 的兄弟)。
跨域问题仅适用于从浏览器发送的请求。 PHP在服务器上运行,所以没有跨域检查。
删除 @
以便您从失败的请求中获得错误消息。
$url
的确切值是多少?
【参考方案1】:
如果在这种情况下 PHP 无法满足您的要求,请尝试使用 jQuery 来获得相同的结果。 SO上有另一个答案,它有一个小函数可以做到这一点:它检查 url 是否指向现有文档或文件,并返回其 HTTP 代码。
https://***.com/a/9377204/536425
试试async: false
和async: true
,看看哪个更适合你。
【讨论】:
由于 AJAX 同域要求,如果图像与网页位于不同的域中,这将不起作用。 @Barmar OP 可能能够添加适当的 CORS 标头,因为他们提到远程站点属于他们 这可能很困难,因为我需要遍历一个列表并根据数据库结果构建我的 html 服务器端。如果我只需要检查单个图像,我会试试这个, 这里的很多人都建议 async false 不是要走的路。甚至 Google Chrome 浏览器有时也会(在控制台中)建议保持调用异步为真(或默认为真)以上是关于使用 ajax 时使用 php file_get_contents() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
当我将 var 从 ajax 发送到 php 时,如果 (isset $_Post[]) 不起作用
如何使用 jQuery AJAX $.post 存储 PHP $_SESSION 变量?