2015-06-23 114 views
1

我在XAMPP 5.6.8上遇到了一个特殊的cURL问题。使用下面的代码,我无法发送在$tempPath中指定的路径中存在的文件。我在想,cURL图书馆可能会与我的路径相混淆,该路径始于c:\Windows PHP cURL上传不在POST文件

我的文件在这里找到: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 
     ) 

) 
+0

做$ _FILES一个的var_dump看什么服务器接收如果有什么? – MiltoxBeyond

+0

它在响应中 – pcnate

+0

这是您的响应,而不是$ _FILES数组的实际值。也许它将数据作为不同的/临时名称发送。或者它可能发送不正确。你可以做'$ output ['files'] = json_encode($ _ FILES);' – MiltoxBeyond

回答

2

我想你是唯一的后ing文件信息..实际数据不发布。文件数据需要作为多部分发布。

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

你应该看看Using curl to upload POST data with files

+0

中完全正常工作,我忘了提及。这在Linux中的apache中工作 – pcnate

+0

你的客户端代码[问题出在哪里],I-e curl调用的代码与apache无关。 – Scalable

+1

除在apache/linux vs xampp/windows上执行php。我没有用浏览器上传 – pcnate