使用 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_existsgetimagesizecUrl 也无济于事。

编辑:

当错误没有被抑制时,这是我的消息:

警告: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: falseasync: true,看看哪个更适合你。

【讨论】:

由于 AJAX 同域要求,如果图像与网页位于不同的域中,这将不起作用。 @Barmar OP 可能能够添加适当的 CORS 标头,因为他们提到远程站点属于他们 这可能很困难,因为我需要遍历一个列表并根据数据库结果构建我的 html 服务器端。如果我只需要检查单个图像,我会试试这个, 这里的很多人都建议 async false 不是要走的路。甚至 Google Chrome 浏览器有时也会(在控制台中)建议保持调用异步为真(或默认为真)

以上是关于使用 ajax 时使用 php file_get_contents() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用单点条目 PHP 时定义 $_POST 变量

当我将 var 从 ajax 发送到 php 时,如果 (isset $_Post[]) 不起作用

如何使用 jQuery AJAX $.post 存储 PHP $_SESSION 变量?

使用 PHP 获取压缩和未压缩的页面大小

在 wordpress 中使用 ajax 将数据发送到 php 时出错

如何使用 AJAX 在 innerHTML 中调用 PHP 值