Windows PHP cURL上传不张贴文件


Windows PHP cURL upload not POSTing a file

我在XAMPP 5.6.8上遇到了一个特殊的cURL问题。使用以下代码,我无法发送在$tempPath中指定的路径上确实存在的文件。我想cURL库可能会与我以c:'开头的路径混淆。

我的文件在这里找到:C:'tempFolder'r_4878.tmp

在linux服务器上,使用完全相同的代码,这确实可以使用/mnt/temp/。为什么要有区别?

这里可能有什么东西坏了?

上传代码

$post = array( 'file_name' => $reportID, 'file_contents'=>'@'.$tempPath.'' );
$return = true;
# set the url that we need to use to upload to each server
$url = "http://server.corp/uploadServer.php";
# curl the file to the remote server
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_POST,             true    );
curl_setopt( $ch, CURLOPT_HEADER,           false   );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER,   true    );
curl_setopt( $ch, CURLOPT_TIMEOUT,          240     );
curl_setopt( $ch, CURLOPT_POSTFIELDS,       $post   );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array( 'Accept: application/json' ));
# get the servers respone and decode the json response
$result = json_decode( curl_exec( $ch ) );
$t = array( $url, $tempPath, file_exists( $tempPath ), $result->success, $post, $result );
echo "'r'n".print_r( $t, true )."'r'n'r'n";
curl_close( $ch );

远程服务器

$output['file_exists'] = file_exists( $_FILES["file_contents"]["tmp_name"] );
$output['file_path']   = $fileName.".txt";
$output['tmp_name']    = $_FILES["file_contents"]["tmp_name"];
$output['success']  = move_uploaded_file( $_FILES["file_contents"]["tmp_name"], $fileName.".txt" );

响应

Array
(
    [0] => http://server.corp/uploadServer.php
    [1] => C:'tempFolder'r_4878.tmp
    [2] => 1
    [3] => 
    [4] => Array
        (
            [file_name] => UnitTest25-felix
            [file_contents] => @C:'tempFolder'r_4878.tmp
        )
    [5] => stdClass Object
        (
            [file_name] => UnitTest25-felix
            [file_exists] => 
            [file_path] => UnitTest25-felix.txt
            [tmp_name] => 
            [success] => 
            [generationTime] => 9.70363616943E-5
        )
)

我认为您只是在发布文件信息。。实际数据不会公布。文件数据需要作为多部分发布。

若要调试,您可能需要创建一个窗体,并在"网络"选项卡中查看其工作方式。它将允许您在使用浏览器时具体查看数据的发送方式。。一旦您看到了,您将对如何POST文件数据有了准确的想法。

您应该看看使用curl上传带有文件的POST数据