我正在努力实现所有这些
我有一个在客户端上传文件的Web服务器(WS)上运行的PHP文件index.php
。
我有另一台足够强大的服务器(GPU)来处理这些文件。
我的用例是,客户上传通过POST
请求发送到index.php
的图片。现在,它必须将文件发送到另一个服务器(GPU),并在GPU上另一个PHP文件,比如process.php
必须拍摄此图像,然后处理它。
到目前为止,我认为我可以使用PHP的cURL
库实现上述功能。
我的问题主要是关于如何将处理后的图像传回客户端?
如何让process.php
将已处理的图片发回index.php
并将其恢复回客户端?
这必须是一项例行任务,但我很感激在实施这项工作方面提供任何帮助。
index.php
的代码,我将文件存储在网络服务器上,因为我需要在处理完成后显示比较(之前/之后)。我还没有实施process.php
<?php
$ds = DIRECTORY_SEPARATOR;
$storeFolder = 'uploads';
if (!empty($_FILES)) {
$tempFile = $_FILES['file']['tmp_name'];
$targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds;
$targetFile = $targetPath. $_FILES['file']['name'];
move_uploaded_file($tempFile,$targetFile);
}
function cURLcheckBasicFunctions() {
if( !function_exists("curl_init") &&
!function_exists("curl_setopt") &&
!function_exists("curl_exec") &&
!function_exists("curl_close") ) return false;
else return true;
}
if( !cURLcheckBasicFunctions() )
{ echo "UNAVAILABLE: cURL Basic Functions"; }
// $url = "129.132.102.52/process.php";
$url = "dump_test.php";
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST, 1);
$fp = fopen($targetFile, "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$reply = curl_exec($ch);
curl_close($ch);
fclose($fp);
echo $_FILES['file']['name'];
?>
答案 0 :(得分:2)
对不起等待。 这是WS中的脚本,它将从客户端接收文件并将其发送到GPU服务器。注意我改变了文件通过curl发送的方式(这是不正确的):
<?php
$ds = DIRECTORY_SEPARATOR;
$storeFolder = 'uploads';
if (!empty($_FILES)) {
$tempFile = $_FILES['file']['tmp_name'];
$targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds;
$targetFile = $targetPath. $_FILES['file']['name'];
move_uploaded_file($tempFile,$targetFile);
}
if(!cURLcheckBasicFunctions() )
{ echo "UNAVAILABLE: cURL Basic Functions"; }
// $url = "129.132.102.52/process.php";
$url = "dump_test.php";
$file = new CURLFile($tempFile);
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'file' => $file,
]);
/**
* As you can see in the script below, the GPU will echo the processed
* file and we will capture it here.
*/
$processedImage = curl_exec($ch);
curl_close($ch);
/**
* And now you can do anything with the processed file.
* For example, let's save it into a file.
*/
file_put_contents('processed_image.jpg', $processedImage);
function cURLcheckBasicFunctions() {
if( !function_exists("curl_init") &&
!function_exists("curl_setopt") &&
!function_exists("curl_exec") &&
!function_exists("curl_close") ) return false;
else return true;
}
这是GPU服务器中的脚本(这将是process.php
):
<?php
$tempFile = $_FILES['file']['tmp_name'];
// Here you would process the file....
// Let's pretend you have the full path to the processed image in the $processedFilePath var.
// Now we will output the processed file contents so the WS server will receive it.
// The header isn't necessary but let's put it.
header('Content-Type: image/jpg');
echo file_get_contents($processedFilePath);
此脚本适用于PHP 5.5+。如果您使用的是旧版本,我们必须更改WS脚本中文件的发送方式。
希望这是你正在寻找的。 p>