SFTP将飞行文件中的HTML制作到外部服务器

时间:2012-12-19 17:42:56

标签: php html ftp sftp

我正在尝试SFTP动态制作的HTML文件(使用文件放置内容)和shh2库。

这是我到目前为止所得到的,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);

3 个答案:

答案 0 :(得分:1)

我会使用phpseclib,一个纯PHP SFTP实现,我自己。例如

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

更便携,也更容易使用。

答案 1 :(得分: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);

我认为不可能上传尚不存在的文件,因为您实际上是直接写入目标服务器而不是上传文件。

我只需在使用取消关联()功能发送后删除该文件。

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

答案 2 :(得分:0)

完全 未经测试,但通常写入SSH连接(在shell下,请注意)使其可用于另一方。考虑到这一点,运行一个命令,将它放在另一侧的正确位置,然后写入它。

$stream = ssh_exec('cat > some/file');
$result = fwrite($stream, $pageBody);