サーバーから別のサーバーにSFTPファイルを介してアップロードする必要があります
ここに私の sftp() 関数があります:
function transfert_curl_sftp($local_filename, $distant_filename, $host_destination, $user_destination,$pubkey_filename,$privkey_filename,$port) {
if ( !extension_loaded('curl') ) return 'no_curl_extension';
$distant_filename = ltrim($distant_filename,'/');
$fp = fopen($local_filenam, 'r');
$sftp_server = $host_destination.'/'.$distant_filename;
$curl = curl_init();
curl_setopt($curl, CURLOPT_UPLOAD, TRUE);
curl_setopt($curl, CURLOPT_HEADER, TRUE);
curl_setopt($curl, CURLOPT_VERBOSE, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($curl, CURLOPT_NOPROGRESS, FALSE);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
$trace = tempnam( dirname($local_filenam),'temp_curl_' );
$fptrace = fopen($trace, 'w');
curl_setopt($curl, CURLOPT_FILE, $fptrace);
curl_setopt($curl, CURLOPT_STDERR, $fptrace);
curl_setopt($curl, CURLOPT_URL, 'sftp://@'.$sftp_server);
curl_setopt($curl, CURLOPT_PORT, $port);
curl_setopt($curl, CURLOPT_USERPWD, $user_destination.':');
curl_setopt($curl, CURLOPT_SSH_PUBLIC_KEYFILE, $pubkey_filename);
curl_setopt($curl, CURLOPT_SSLENGINE, '');
curl_setopt($curl, CURLOPT_SSLKEY, $privkey_filename);
curl_setopt($curl, CURLOPT_SSLKEYPASSWD, '');
curl_setopt($curl, CURLOPT_INFILESIZE, filesize($local_file));
curl_setopt($curl, CURLOPT_INFILE, $fp);
$info = curl_getinfo($curl);
$start_error_no = curl_errno($curl);
$valid_operation = curl_exec($curl);
$final_error_no = curl_errno($curl);
curl_close($curl);
fclose($fp);
fclose($fptrace);
echo '<pre>trace:',file_get_contents($trace),'<hr>'; var_dump($start_error_no,$valid_operation,$final_error_no);
return true;
}
ファイルはアップロードされません:-(
トレース ファイルを見ると、* 利用可能な SSH 認証方法: publickey,password * ssh 公開鍵ファイル /var/www/xxx/yyy/upload/dsa-zzz.pub を使用 * ssh 秘密鍵ファイル id_dsa を使用 * SSH 公開鍵認証に失敗しました: コールバックがエラー * を返し たので、「CURLOPT_SSLKEY」パラメーターが実際には設定されていないと思います...すべてのキー ファイルは読み取りに問題ありません...
それはPHPのバグですか?または私は何かを書くのに失敗しますか?