我无法让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);
我意识到我可能会遗漏一些简单的东西,有什么帮助吗?
答案 0 :(得分:3)
你的代码中有这一行:
$file = 'public_html/mydomain.com/files/readme.txt';
这让我假设:要么你的工作脚本在Web-root之外,要么代码错误......你确定文件的位置是对的吗?
答案 1 :(得分:2)
唯一想到的是:
$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;
会产生类似
的网址用户:通@ FTP://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);
如果你需要使用不同的协议,这也会给你留有余地。