如何上传一个有空格的文件是用curl + php命名的?

Tom*_*tor 5 php curl

我正在使用此代码将文件上传到我的服务器,使用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);
Run Code Online (Sandbox Code Playgroud)

当$ filepath不包含空格时,此代码有效.但是,有可能.当我用空格测试路径时,我得到卷曲错误"创建formpost数据失败".

卷曲手册没有告诉我该怎么做,它给我的是没有空格的unix文件名.我试过像http://curl.haxx.se/mail/archive-2006-01/0079.html这样,但它也没有帮助我:

"upload" => '"@' . $filepath . '"'
"upload" => '@"' . $filepath . '"'
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?

ADW*_*ADW 2

当前版本的 cURL(和 PHP-cURL)可以毫无问题地处理文件名中的空格。旧版本可能有错误,我不确定。检查您使用的是相当新的版本。

我可以确认文件名中的空格在 Linux 上的 PHP 5.2.13 和 libcurl/7.19.4 下完全没有问题。

您收到的错误消息与 PHP/cURL 找不到文件时收到的错误消息相同。问题很可能出在代码的其他地方。可能是文件名中的空格转义不足或过度的问题,但可能不是 cURL 本身的问题。

我建议在代码中的其他位置查找问题或生成出现问题的硬编码示例(其中 $filename 直接在 PHP 中设置,而不是从其他地方读取)。