在IIS服务器上使用php CURL发送文件不工作

在IIS服务器上使用php CURL发送文件不工作,php,cakephp,iis,curl,amazon,Php,Cakephp,Iis,Curl,Amazon,我完全被这种情况所困扰, 问题1: 我想将文件从一台服务器发送到另一台服务器,为了发送文件,我使用了curl,这是通过curl发送文件的标准或更常见的代码 `$url=$callthis; $filename=$\u文件['orig\u文件名]['name']; $filedata=$\u文件['orig\u文件名]['tmp\u文件名]; $filesize=$\u文件['orig\u文件名]['size']; 如果($filedata!='') { 仅供参考,curl安装在服务器上并已启用

我完全被这种情况所困扰, 问题1: 我想将文件从一台服务器发送到另一台服务器,为了发送文件,我使用了curl,这是通过curl发送文件的标准或更常见的代码 `$url=$callthis; $filename=$\u文件['orig\u文件名]['name']; $filedata=$\u文件['orig\u文件名]['tmp\u文件名]; $filesize=$\u文件['orig\u文件名]['size']; 如果($filedata!='') {

仅供参考,curl安装在服务器上并已启用 这段代码在我的本地PC上运行得很好,我希望在linux系统上也能如此,但我的代码将在amazone IIS服务器上实现,因此当我上传代码并进行测试时,它会给我0状态代码,当我在谷歌上搜索时,他们会说你的URL不正确,在我的情况下是正确的,因此问题是在curl请求之前放置了“@”符号关于文件名和php curl文档,他们说@sign是必须的,以便告诉接收方服务器它是一个物理文件而不是纯文本,当我删除这个@sign时,接收端会收到200个响应代码,但该文件没有保存在所需的目录中

问题2:我从stackoverflow中的一个家伙那里实现了另一个代码 `$url=$callthis; $filename=$\u文件['orig\u文件名]['name']; $filedata=$\u文件['orig\u文件名]['tmp\u文件名]; $filesize=$\u文件['orig\u文件名]['size']; //调试($this->request->data);退出(); 如果($filedata!=''){


这很好,但只适用于文本文件,因为它可以
chunk\u split(base64\u encode(file\u get\u contents($file\u url))`我的意思是读取要发送的文件,这在文本文件中很有效,但在我的情况下,我想发送第2期中不起作用的图像,因为它修改了图像内容,因此无法打开图像


仅供参考,我不能发送jquery/ajax文件,我需要通过php发送,所以答案应该是有效的、可行的curl请求代码来发送文件,或者使用发送文件的cakephp httpsocket。请注意,php>=5.6默认情况下禁用curl的@file约定,因此如果您有不同的版本,这可能是您的问题

要使用PHP>=5.6的现有代码,可以添加

CURLOPT_SAFE_UPLOAD => false
到您的选项数组

如果这是您的问题,请参阅更改日志以了解更多信息:

否则,需要明确的是:这不应该与web服务器直接相关(IIS与Apache),除非服务器使用不同的php配置,或者运行web服务器服务的用户附加了影响脚本的权限

那么您确定php/curl库在您的环境中正确运行了吗 有时我只是在终端命令提示符下进行“hello word”测试,例如:

php -r "$ch = curl_init('http://www.google.com'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); die($output);"
这应该只是将google.com的代码转储到你的终端中。这很有效,对吗

对url执行同样的操作…尤其是在使用SSL的情况下!您可能会遇到SSL问题,例如对等验证等!还请注意,如果上述方法适用于,则如果SSL库依赖项(对于IIS,为libeay32.dll和ssleay32.dll)可能无法访问,则可能无法保证它在web应用程序中工作

状态代码0似乎表示将根据上述测试弹出某些内容,但它可能出于其他原因放弃重影:

例如,您确定代码中的$filedata是一个可访问的路径吗?请在设置这些post字段之前尝试:


如果(!is_file($filedata))死亡('where is'.$filedata.?');

@filename在PHP>=5.5.0中已被弃用:


改用新的CurlFile,不需要对接收端进行任何更改。

我的php版本是5.5
CURLOPT_SAFE_UPLOAD => false
php -r "$ch = curl_init('http://www.google.com'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); die($output);"