微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用curl + php上传名称为空格的文件?

如何解决如何使用curl + php上传名称为空格的文件?

| 我正在使用以下代码通过HTTP POST将文件上传到服务器:
$ch = curl_init();
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_VERBOSE,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,true);
$post = array(
    \"upload\" => \'@\' . $filepath
);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
$curl_result = curl_exec($ch);
当$ filepath不包含空格时,此代码有效。但是,可能会这样。当我用空格测试路径时,出现卷曲错误“无法创建formpost数据”。 curl手册没有告诉我该怎么做,它给我的是unix文件名,没有空格。我像这样尝试了http://curl.haxx.se/mail/archive-2006-01/0079.html,但它也没有帮助我:
\"upload\" => \'\"@\' . $filepath . \'\"\'
\"upload\" => \'@\"\' . $filepath . \'\"\'
有人有主意吗?     

解决方法

当前版本的cURL(和PHP-cURL)可以毫无问题地处理文件名中的空格。我不确定较旧的版本可能存在错误。检查您使用的是合理的最新版本。 我可以确认,在Linux上的PHP 5.2.13和libcurl / 7.19.4下,文件名中的空格完全没有问题。 您收到的错误消息与PHP / cURL找不到文件时的错误消息相同。奇怪的是,问题出在代码的其他地方。可能是文件名中的空格不足或过度转义的问题,但cURL本身可能不是问题。 我建议您在代码中的其他地方查找该问题,或提供一个发生该问题的硬编码示例(其中$ filename是直接在PHP中设置的,而不是从其他位置读取的)。     ,你需要真实的道路
$filepath = \'D:\\7 habits copy.txt\';
$url = \'http://www.speedyshare.com/upload.php?\'.rand(10000000,99999999);
$ch = curl_init();
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_VERBOSE,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,true);
$post = array(
    \"upload\" => \'@\' . realpath($filepath)
);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
$curl_result = curl_exec($ch);
echo $curl_result;
即使在Windows上也可以使用。我很确定它将在* NIX系统上运行     ,我遇到了同样的问题,无法在系统上升级CURL。 因此,我编写了一个简单的转义函数,该函数在字符串上迭代以替换
+
符号的空格字符,这是用空格表示URL的传统方式。 令我惊讶的是,它奏效了。 :) C ++代码:
#include <algorithm>
#include <string>

std::string s = \"\";
std::replace(s.begin(),s.end(),\' \',\'+\');    
    ,您将需要逃脱空间。不确定您将使用的语法,但可能是这样的:
\'This is the file name with spaces.txt\'
\'This\\ is\\ the\\ file\\ name\\ with\\ spaces.txt\'
再次,我不确定语法只是一个例子 或者您可能只需要在文件名中加上引号,例如:
\'This is the file name with spaces.txt\'
    ,将目标文件放在变量中,例如\'while read \',然后在curl中传递该命令。确保变量用双引号引起来,并且curl将对其进行处理。 例如:
curl -T /PATH/TO/YOUR/FILE/DIRECTORY/\"$f\"
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。