在 PHP (linux) 中覆盖文件/函数

Posted

技术标签:

【中文标题】在 PHP (linux) 中覆盖文件/函数【英文标题】:Overwrite Files/Functions in PHP (linux) 【发布时间】:2015-04-21 19:06:47 【问题描述】:

我想知道如何才能,例如,覆盖我的“index.php”,以便我可以自动更新我的页面。

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

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

表格

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

上传者.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 进程然后修改文件并重新启动它?

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

【问题讨论】:

我个人认为 bash 非常适合这个。请参阅 SCP 和 rsync 命令。如果您在联系我时遇到问题 :) 您的 Web 服务器进程可能没有(也不应该)对 /var/www/ 具有写入权限,因此这可能不起作用。相反,您应该做的是使用 ssh/scp/rsync/sftp 来更新服务器上的文件,作为对文件存储位置具有写入权限的用户。如果您授予您的网络服务器用户对这些文件的写入权限,那么您的服务器将很快被黑客入侵。 >Kheshav - 我会的,谢谢 ;) >delatbabel - 我明白了......是的,安全性真的很弱,但我只想让它运行,然后让它安全。谢谢顺便说一句。 我结束了使用 dropbox 和 .bash,它做我想做的事,而且比我打算做的更安全 【参考方案1】:

你的方法是好的开始,但不推荐,因为

不安全 不安全

这是不安全的,因为你需要在你的根网站上写权限,这对 web 进程来说是一个很大的安全问题。

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

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

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

编辑:

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

【讨论】:

好吧,我实际上是一个新手,我遇到的问题是显示数据的地方是一个偏远的地方,所以ssh的连接速度很差,所以就像:在晚上它会下载内容并在白天显示,但是是的,我想我会尝试 rsync 或其他东西。目前,安全不是我的首要任务之一。感谢您的出色回答;) SSH 由于使用了高级别的加密,在进行远程登录时通常会很慢,但是当您运行 PHP 脚本并安排它下载时,它会快得多,因为它使用大多数情况下的服务器互联网通用案例很好,可以轻松下载更改。 SVN 解决方案效果最好,并允许您控制它的版本。您可以从各种免费服务中试用 GIT。

以上是关于在 PHP (linux) 中覆盖文件/函数的主要内容,如果未能解决你的问题,请参考以下文章

用于覆盖 MP3 文件以在 PHP 中使用的 Linux 工具

覆盖主题的“inc”文件夹内的 woocommerce.php 文件中的函数

linux解压带密码的zip的命令是啥

linux的文件,目录操作命令

覆盖 laravel 5 辅助函数

怎样在linux中覆盖文件夹以及文件夹里的文件