file_put_contents问题 - “没有这样的文件或目录”

时间:2011-02-28 17:31:45

标签: php file upload

我无法让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 个答案:

答案 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

虽然应该

  

ftp://User: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); 

如果你需要使用不同的协议,这也会给你留有余地。