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);

リモートサーバーから別のリモートサーバーにファイルを配置しようとしましたが、ローカルホストからこのコードを実行してファイルを処理し、ローカル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 サーバーに問題があり、フォルダーを右クリックしてフォルダーを手動でパブリックに設定する必要がありました。

転送したいサーバーの2番目のもの。フォルダーまたはパスはすべてのユーザーに対してパブリックにする必要があります (すべてのファイルを転送した後、読み取り専用に変更できます)。これにより、すべてのユーザーがターゲット フォルダーにファイルを書き込む権限を持ちます。

@chetanAmeta によって書かれたコード ブロックは正しいようです。

この答えはあなたを助けるかもしれません。

于 2015-12-18T06:12:38.100 に答える
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 に答える