【问题标题】:Using php file_get_contents() does not work when using ajax使用 ajax 时使用 php file_get_contents() 不起作用
【发布时间】: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 的确切值是多少?

标签: php jquery ajax file-exists


【解决方案1】:

如果在这种情况下 PHP 无法满足您的要求,请尝试使用 jQuery 来获得相同的结果。 SO上有另一个答案,它有一个小函数可以做到这一点:它检查 url 是否指向现有文档或文件,并返回其 HTTP 代码。

https://stackoverflow.com/a/9377204/536425

试试async: falseasync: true,看看哪个更适合你。

【讨论】:

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