file_put_contents (): ошибка connect (): в сервере AWS отказано в разрешении

$username_ftp = "user";
$password_ftp = "password";
$file_name = "remote-transfer.txt";
$url = "example.biz/test/" . $file_name;
$hostname = "ftp://$username_ftp:$password_ftp@$url";
$content = file_get_contents('index.html');
$options = array('ftp' => array('overwrite' => true));
$stream = stream_context_create($options);
file_put_contents($hostname, $content, 0, $stream);

Я пытаюсь поместить файл с моего удаленного сервера на другой удаленный сервер
в то время как я вытесняю этот код с моего локального хоста, он работает, и я передаю файл с моего компьютера ocal на сервер.
Но когда я пытаюсь удалить этот код с моего сервера AWS, он не передает никакого файла, когда я проверяю свой файл журнала ошибок, он дает

PHP Warning:  file_put_contents(): connect() failed: Permission denied
PHP Warning:  file_put_contents(ftp://[email protected]/remote-transfer.txt): failed to open stream: operation failed in

мой тестовое задание разрешение папки 777
Теперь, что делать, есть ли какая-либо конфигурация сервера, которую нельзя делать.

4

Решение

Я думаю, что проблема с вашим $hostname попробуйте это с: (Я пробовал это решение с моим экземпляром ec2 и он работает.)

<?php
/* set the FTP hostname */
$user = "test";
$pass = "myFTP";
$host = "example.com";
//path of file
$file = "test.txt";
$hostname = $user . ":" . $pass . "@" . $host . "/" . $file;

/* the file content */
$content = "this is just a test.";

/* create a stream context telling PHP to overwrite the file */
$options = array('ftp' => array('overwrite' => true));
$stream = stream_context_create($options);

/* and finally, put the contents */
file_put_contents($hostname, $content, 0, $stream);
?>

источник: PHP: file_put_contents — Руководство

0

Другие решения

Вам нужно проверить привилегии с обоих концов:

Сначала ваш сервер AWS (ваша текущая папка тестирования) должен быть общедоступным для всех операций 777 (я думаю, что вы уже выполнили), а используемые учетные данные должны иметь все привилегии для доступа ко всем файлам.

Примечание: ранее у меня была проблема с сервером AWS, из-за которой я должен был вручную установить общую папку, щелкнув правой кнопкой мыши на папке.

Вторая вещь на сервере, на который вы хотите перенести; Папка или путь должны быть общедоступными для всех пользователей (после передачи всех файлов вы можете изменить их только для чтения), и при этом у всех пользователей есть разрешение на запись файла в целевую папку.

И блок кода, написанный @chetanAmeta, кажется правильным.

Этот ответ может помочь вам.

0

С тех пор, как я предложил награду, я, конечно, смог выяснить это сам (очень жаль, что я не могу вернуть свою награду). Но в любом случае, решение состоит в том, чтобы смонтировать папку, используя пользователя сервера apache (возможно, «www-data»), и тогда сервер сможет записывать в общий ресурс, конечно, учитывая, что остальные разрешения установлены правильно.

Надеюсь, что это поможет кому-то еще, так как это было очень неприятно для меня в начале.

0

Если вы абсолютно уверены, что файл существует, значит, это проблема вашего сервера. Выполнение кода ниже в терминале может решить вашу проблему:

setsebool -P httpd_can_network_connect on

Устанавливает логическое значение. Больше информации: http://linux.die.net/man/8/setsebool

0
По вопросам рекламы [email protected]