我在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
)
)
做$ _FILES一个的var_dump看什么服务器接收如果有什么? – MiltoxBeyond
它在响应中 – pcnate
这是您的响应,而不是$ _FILES数组的实际值。也许它将数据作为不同的/临时名称发送。或者它可能发送不正确。你可以做'$ output ['files'] = json_encode($ _ FILES);' – MiltoxBeyond