2011-02-28 99 views
0

我无法让file_put_contents()工作将解码后的电子邮件附件上传为我的服务器上的文件。这是基本的脚本: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); 

我意识到,我可能失去了一些东西死的简单,任何帮助吗?

回答

3

您有这行代码:

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

这让我假设:要么你的工作脚本之外的Web根目录,或编码是错误的...你确定文件的位置是正确的?

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; 

会导致类似

用户的URL:通@ftp://host.com/file

虽然它应该是

ftp://User:[email protected]/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); 

这也会给你回旋余地以后,如果你需要使用不同的协议。

相关问题