如何在slim3 php中将文件上传到另一台服务器

时间:2016-08-24 21:41:35

标签: php slim

我使用silm3作为我的REST API框架,并遵循this从API编写我的文件上传脚本。

我目前正在a.xyz.com上运行我的网络应用程序,我的REST API位于b.xyz.com。现在我想从b.xyz.com/upload上传一张图片到a.xyz.com/uploaded/。

$newfile->moveTo("/path/to/$uploadFileName");

用于将文件保存在当前子域中。但是我没能将它上传到另一个子域。

我在网上搜索,但没有找到任何线索如何做到这一点。

2 个答案:

答案 0 :(得分:1)

将b.xyz.com上的文件移动到正确位置后,请执行以下操作:

// Server B

// Move file to correct position on B
$newfile->moveTo("/path/to/$uploadFileName");

// Send file to A
$request = curl_init('a.xyz.com/upload');
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_POSTFIELDS, [
  'file' => new CURLFile("/path/to/$uploadFileName")
]);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($request);
curl_close($request);

a.xyz.com然后应该接受该文件并继续存储它。如果使用Slim,就像b.xyz.com一样

...
$newfile->moveTo("/path/to/$uploadFileName");

或使用PHP的核心功能

// Server A
if ( !empty($_FILES["file"]) && !empty($_FILES["file"]["tmp_name"]) ) {
  // Move file to correct position on A
  $uploadFileName = basename($_FILES["file"]["name"]);
  move_uploaded_file($_FILES["file"]["tmp_name"], "/path/to/$uploadFileName");
}

答案 1 :(得分:0)

通常,域或子域仅限于自己的网站空间,因此您无法读取或写入其他域的文件。设置是calles open_basedir。

您必须在vhost配置中设置它,但还有其他方法,例如,如果您的主机允许,则使用.htacces文件设置它: How can I relax PHP's open_basedir restriction?