用PHP覆盖文件/函数(linux)

时间:2015-02-20 06:58:52

标签: php html file function lamp

我想知道我怎么能,例如,覆盖我的“index.php”,这样我就可以自动更新我的页面。

我要做的是沟通2台服务器,服务器1告诉服务器2何时有新的更新,服务器2下载它:

*将新网页“content.zip”上传到我的网站服务器1: (我这样做是因为这样我可以备份我的内容)

形式

<form action="uploader.php" method="post" enctype="multipart/form-data">
                <input type="file" name="file" />
                <input type="submit" value="Upload" />
            </form>

uploader.php

<?php 
$folder = "content/";
opendir($folder);
$destiny = $folder.$_FILES['file']['name'];

copy($_FILES['file']['tmp_name'],$destiny);
echo "Successful";
?>

*然后告诉webserver2下载新内容并替换旧内容。

if(somevariable == true){
    file_put_contents("newcontent.zip", file_get_contents("http://someurl/fsadasd.zip"));
}

然后:

<?php
$zip = new ZipArchive;
$res = $zip->open('newcontent.zip');
if ($res === TRUE) {
  $zip->extractTo('var/www/');
  $zip->close();
  echo 'woot!';
} else {
  echo 'doh!';
}
?>

Code reference

另外,我是否必须停止LAMP过程然后修改文件并重新启动它?

如果有人知道更好的方法,请告诉我。感谢。

1 个答案:

答案 0 :(得分:1)

您的方法是一个良好的开端,但不推荐,因为

  • 不安全
  • 不安全

实现这一点并不安全,您需要在您的根网站上拥有写入权限,这对Web进程来说是一个很大的安全问题。

这不安全,因为您没有对复制的文件进行任何哈希检查?当您的网络连接中断或您的索引文件由于任何磁盘错误而未正确写入时会发生什么?我知道你可能会认为它不会发生,但它确实发生在我身上,当上述方法对我失败时,我正在睡觉。那天生气的客户。

最好的方法是,即使你想用PHP编写它,只需将你的下载脚本安排为具有写入权限但不是你的web用户的其他Linux用户。然后该计划将检查远程服务器上的某些DB值或文件,如果可以下载,则临时提取,检查文件哈希,替换每个文件,再次检查哈希。

但是,为什么要这样做,当您可以轻松使用rsync和其他同步实用程序为您执行相同操作时,请尝试使用版本控制,然后将文件从该文件同步到您的根目录。这是安全和健全的。

编辑:

我所做的是,我们为我们的实际站点配置了SVN,并且我们每天运行一次cron,在我们的Web根目录上执行svn update。简单!!!如果需要的话,我最多只需要ssh并做同样的事情。