-1

その場で作成されたHTMLファイル(ファイルプットコンテンツを使用)とshh2ライブラリをSFTPで転送しようとしています。

これが私がこれまでに得たものです、apacheはファイルがローカルディスクに存在しないのでそれを送ることができないと報告します:

$pageBody = '<body>
    <div id="canvas_container">
        <canvas id="designer_canvas" width="430" height="415">
        </canvas>
    </div>
<div style="display:none" id="share_design_details">
<li>'.$mc1.'</li><li>'.$mc1.'</li><li>'.$mc2.'</li><li>'.$sp.'</li><li>'.$p.'</li><li>'.$c.'</li></div>

<div id="test">This design is called : '.$designName.'</div></body>' ; 


$newFile = file_put_contents('newfile.html',$pageBody);
$connection = ssh2_connect('myhost.com', 22);
ssh2_auth_password($connection, 'myuser', 'mypass');

$sftp = ssh2_sftp($connection);
ssh2_scp_send($connection, $newFile, $newFile, 0644);
4

3 に答える 3

1

私は、純粋なPHPSFTP実装であるphpseclibを自分で使用します。例えば。

<?php
include('Net/SFTP.php');

//Define content
$pageBody = 'CONTENT HERE';

//Connect to SFTP host
$sftp = new Net_SFTP('myhost.com', 22);
$sftp->login('myuser', 'mypass');

//Send the file
$sftp->put('/tmp/temp.html', $pageBody);
?>

はるかにポータブルで、間違いなく使いやすいです。

于 2012-12-20T14:15:28.380 に答える
0

ssh2_scp_send ()関数には、ローカルファイルとリモートファイルのファイルパスが必要です。

http://php.net/manual/en/function.ssh2-scp-send.php

file_put_contents()関数は、ファイルパスではなく、ファイルに書き込まれたバイト数を返します。

http://php.net/manual/en/function.file-put-contents.php

したがって、ssh2_scp_send()は、ターゲットサーバーのターゲットディレクトリが/ tmpである場合、次のように読み取る必要があります。

ssh2_scp_send($connection, 'newfile.html', '/tmp/newfile.html', 0644);

ファイルをアップロードするのではなく、基本的にターゲットサーバーに直接書き込むため、まだ存在しないファイルをアップロードすることはできないと思います。

unlink()関数を使用して送信した後、ファイルを削除するだけです。

http://php.net/manual/en/function.unlink.php

したがって、完全なロジックは次のようになります。

//Define content
$pageBody = 'CONTENT HERE';

//Create the file
$newFile = file_put_contents('temp.html', $pageBody);

//Connect to SFTP host
$connection = ssh2_connect('myhost.com', 22);
ssh2_auth_password($connection, 'myuser', 'mypass');
$sftp = ssh2_sftp($connection);

//Send the file
ssh2_scp_send($connection, 'temp.html', '/tmp/temp.html', 0644);

//Delete the local file
unlink('temp.html);
于 2012-12-19T17:52:15.050 に答える
0

完全にテストされていませんが、通常はSSH接続に書き込むと(シェルの下で)、反対側で使用できるようになります。そのことを念頭に置いて、反対側の適切な場所に配置するコマンドを実行してから、書き込みます。

$stream = ssh_exec('cat > some/file');
$result = fwrite($stream, $pageBody);
于 2012-12-19T18:01:52.243 に答える