不同版本和操作系统的PHP文件获取内容行为

不同版本和操作系统的PHP文件获取内容行为,php,apache,ubuntu,xampp,windows-10,Php,Apache,Ubuntu,Xampp,Windows 10,我在PHP中使用file\u get\u contents从客户机的contentDM集合中获取信息。CDM有一个API,因此您可以通过进行php查询来获取该信息,例如: 到目前为止,它在计算机和操作系统中运行得相当好。然而,这一次的工作方式有点不同 对于这个查询,我用相关值填写mycollection、myid和myname。显然,myid和mycollection必须存在于系统中。然而,我的名字可以是你想要的任何东西。运行查询时,它不会将网页或任何内容返回到浏览器。它只是自动下载一个以m

我在PHP中使用
file\u get\u contents
从客户机的contentDM集合中获取信息。CDM有一个API,因此您可以通过进行php查询来获取该信息,例如:

到目前为止,它在计算机和操作系统中运行得相当好。然而,这一次的工作方式有点不同

对于这个查询,我用相关值填写mycollection、myid和myname。显然,myid和mycollection必须存在于系统中。然而,我的名字可以是你想要的任何东西。运行查询时,它不会将网页或任何内容返回到浏览器。它只是自动下载一个以myname作为文件名的文件,并将其放入本地/downloads文件夹中

我不想下载这个文件。我只想将它返回的文件的内容作为字符串直接读入PHP。我试图获取的文件只包含xml数据

file\u get\u contents
用于获取该文件中的数据,如果我在运行Ubuntu的笔记本电脑上与PHP7和Apache一起使用。但是,在我运行Windows 10和XAMPP(Apache和PHP5)的桌面上,我遇到了这个错误(我用####替换了敏感数据):

警告: 文件获取内容(####/utils/collection/####/id/1110/filename/1111.cpd): 无法打开流:中没有此类文件或目录 D:\Titus\Documents\GitHub\NativeAmericanSCArchive\NASCA site\api\update.php 第18行

我的同事一直无法帮助我,所以我很好奇这里是否有人可以确认或否认这是操作系统问题,还是PHP版本问题,是否有可靠的替代方法可以在PHP5以及Windows和Ubuntu上使用。

file\u get\u contents()是一把简单的螺丝刀。它非常适合通过简单的
GET
请求来获取数据,其中头、HTTP请求方法、超时、cookiejar、重定向和其他重要内容都无关紧要

带有流上下文的fopen()或带有setopt的cURL都是powerdrills,具有您可以想到的每一位和选项

除此之外,由于最近的一些网站黑客行为,我们不得不加强网站的安全。在这样做的过程中,我们发现file\u get\u内容无法工作,而curl仍然可以工作

不是100%,但我相信这个php.ini设置可能阻止了文件获取内容请求

; Disable allow_url_fopen for security reasons
allow_url_fopen = 0
不管怎样,我们的代码现在都可以使用curl

参考资料:

所以,您可以通过使用PHP cURL扩展来解决这个问题。下面是一个与您尝试的相同的示例:

function curl($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($ch);
        curl_close($ch);

        return $data;
    }
$url = 'your_api_url';
$data = curl($url);
最后,您可以通过打印($data)检查数据。希望它能起作用,你能理解


参考

PHP5,具体是哪个版本?版本5.6.30。它不是http包装警告。这管用!你知道什么是使文件内容在我的笔记本电脑上工作而不是在桌面上工作的限制因素吗?我假设它是PHP版本,但我不能确定。我认为没有限制。但是我认为在php中使用
curl
调用api的最佳方法。我以前遇到过这个问题,我习惯于
curl
作为最佳解决方案。很高兴知道我的回答对你有帮助。所以选择我的解决方案作为你的答案。我很乐意,但我的问题还没有完全得到回答。cURL是一种可靠的替代方法,在我的Ubuntu/PHP7机器和Windows/PHP5机器上都适用。但我的问题很大一部分是要理解哪里出了问题。file_get_contents函数将在Ubuntu/PHP7上运行,但不适用于Windows/PHP5上的相同应用程序。显然,机器之间至少有一个限制因素。如果你不能回答这个问题,你能简单描述一下cURL比file\u get\u更好的地方是什么吗?“这至少会给我一些关于这个问题的背景知识。”马修詹德拉西亚克我更新了我的答案。请看这个。谢谢。谢谢你,苏蒙:)这就把事情弄清楚了一点。把它标记为答案。