我正在使用以下代码通过HTTP POST将文件上传到服务器:

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, 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不包含空格时,此代码有效。但是,可能会这样。当我用空格测试路径时,出现 curl 错误“无法创建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中设置的,而不是从其他位置读取的)。

关于php - 如何使用curl + php上传名称为空格的文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5662726/

10-16 20:32