Как загрузить файл на другой сервер в Slim3 PHP

Я использую silm3 в качестве моей инфраструктуры REST API и следовал этому, чтобы написать скрипт загрузки файлов из API.

В настоящее время я запускаю свое веб-приложение на a.xyz.com, а мой REST API - на b.xyz.com . Теперь я хочу загрузить изображение в a.xyz.com/uploaded/ с сайта b.xyz.com/upload.

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

используется для сохранения файла в текущем поддомене. Но мне не удалось загрузить его в другой поддомен.

Я ищу в Интернете, но не нашел ни малейшего понятия, как это сделать.

2 ответа

Переместив файл на 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");
}

Обычно домены или субдомены ограничены собственным веб-пространством, поэтому вы не можете читать или записывать файлы другого домена. Настройка называется open_basedir.

Вы должны установить его в своей конфигурации vhost, но есть и другие способы, такие как установка его с помощью файла.htacces, если ваш хостер позволяет это: Как я могу ослабить ограничение PHP open_basedir?

Другие вопросы по тегам