Проблема с file_put_contents - "нет такого файла или каталога" - PullRequest
0 голосов
/ 28 февраля 2011

У меня проблемы с тем, чтобы file_put_contents () работал при загрузке декодированных вложений электронной почты в виде файлов на мой сервер.Вот основной сценарий:

$user = "user";
$pass = "pass";
$host = "ftp://mydomain.com";   

$content = 'hello';
$file = 'public_html/mydomain.com/files/readme.txt';

$options = array('ftp' => array('overwrite' => true));
$stream = stream_context_create($options);

$hostname = $user . ":" . $pass . "@" . $host . "/" . $file; 

file_put_contents($hostname, $content, 0, $stream); 

Я пробовал различные формулировки этого, в том числе вход в систему от имени разных пользователей ftp, и независимо от того, что я делаю, я получаю ошибку «нет такого файла или каталога».Мой сервер имеет типичную структуру файловой структуры "/public_html/mydomain.com/", но это, похоже, не работает.

Однако, когда я пытаюсь использовать ftp_put (), кажется, чтоподключиться и найти каталог просто отлично - но я не могу использовать ftp_put (), потому что я загружаю не локальный файл, а строку в удаленный файл.

Вот код, который я использовал для этого:

$user = "user";
$pass = "pass";
$host = "mydomain.com";   

$ftp_path = '/public_html/files';

$content = 'localfile.txt'

$conn_id = ftp_connect($host, 21) or die ("Cannot connect to host"); 

ftp_pasv($conn_id, true);
ftp_login($conn_id, $user, $pass) or die("Cannot login");
// perform file upload
ftp_chdir($conn_id, '/public_html/mydomain.com/files/');
$upload = ftp_put($conn_id, $ftp_path, $content, FTP_BINARY);
if($upload) { $ftpsucc=1; } else { $ftpsucc=0; }

ftp_close($conn_id); 

Я понимаю, что, возможно, мне не хватает чего-то невероятно простого, какая-нибудь помощь?

Ответы [ 2 ]

3 голосов
/ 28 февраля 2011

В вашем коде есть эта строка:

$file = 'public_html/mydomain.com/files/readme.txt';

Что заставляет меня предположить: либо ваш рабочий скрипт находится вне Web-корня, либо ИЛИ неправильный код ... Вы уверены, что файл находится в правильном положении?

2 голосов
/ 28 февраля 2011

Единственное, что приходит на ум, это:

$user = "user";
$pass = "pass";
$host = "ftp://mydomain.com";   

$content = 'hello';
$file = 'public_html/mydomain.com/files/readme.txt';

$options = array('ftp' => array('overwrite' => true));
$stream = stream_context_create($options);

$hostname = $user . ":" . $pass . "@" . $host . "/" . $file; 

file_put_contents($hostname, $content, 0, $stream); 

Или, точнее, эта строка:

$hostname = $user . ":" . $pass . "@" . $host . "/" . $file; 

приведет к URL-адресу типа

Пользователь: Pass @ ftp: //host.com/file

Хотя это должно быть

ftp: // Пользователь: Pass @ host.com / file

Так что я бы изменил его на

$protocol = "ftp://";
$user = "user";
$pass = "pass";
$host = "mydomain.com";   

$content = 'hello';
$file = 'public_html/mydomain.com/files/readme.txt';

$options = array('ftp' => array('overwrite' => true));
$stream = stream_context_create($options);

$hostname = $protocol . $user . ":" . $pass . "@" . $host . "/" . $file; 

file_put_contents($hostname, $content, 0, $stream); 

Это также даст вам свободу действий позже, если вам нужно использовать другой протокол.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...