5
$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 pc 传输到服务器。但是当我尝试从我的 AWS 服务器执行此代码时,它不会传输任何文件,当我检查我的错误日志文件时,它会给出

PHP Warning:  file_put_contents(): connect() failed: Permission denied 
PHP Warning:  file_put_contents(ftp://...@example.biz/remote-transfer.txt): failed to open stream: operation failed in

我的测试 文件夹权限是777 现在该怎么办,是否有任何服务器配置错过了。

4

4 回答 4

2

如果您绝对确定该文件存在,那么您的服务器似乎有问题。在终端中执行以下代码可以解决您的问题:

setsebool -P httpd_can_network_connect on

它设置布尔值。更多信息: http: //linux.die.net/man/8/setsebool

于 2015-12-21T11:53:55.303 回答
1

您需要从两端检查权限:

首先,您的 AWS 服务器存储桶(您当前的测试文件夹)应该对所有操作 777(我认为您已经完成)是公开的,并且您使用的凭证必须具有访问所有文件的所有权限。

注意:以前我遇到了 AWS 服务器的问题,我必须通过右键单击文件夹来手动设置公共文件夹。

您要转移的服务器上的第二件事;该文件夹或路径应该对所有用户公开(传输所有文件后,您可以将其更改为只读),并且所有用户都有权在您的目标文件夹中写入文件。

@chetanAmeta 编写的代码块似乎是正确的。

这个答案可能会对你有所帮助。

于 2015-12-18T06:12:38.100 回答
0

自从提供了赏金,我当然能够自己解决(太糟糕了,我无法收回我的赏金)。但无论如何,解决方案是使用apache服务器的用户(可能是“www-data”)安装文件夹,然后服务器将能够写入共享,当然要设置其余权限正确起来。

希望这对其他人有所帮助,因为一开始我很沮丧。

于 2015-12-18T19:13:04.097 回答
0

我认为您的$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 - 手册

于 2015-12-18T04:40:30.060 回答