如何上传PHP脚本而不会在上传期间抛出错误?

时间:2012-12-09 02:08:06

标签: php ftp

我有一个相当有趣的问题。我使用FileZilla和Notepad ++来编辑我的PHP脚本。一个名为functions.php的脚本经过编辑和更改。不幸的是,每当我编辑它并重新上载它时,我会检查我的错误日志,并发现每次重新上载时我的网站上都会抛出大约5个错误。它只需要几秒钟,但由于脚本包含在我网站的每个页面上,因此几秒钟就足以引发错误。

我在想,或许,我可以有一个基本相同的functions2.php。如果functions2.php不可用,我的网站上的脚本是否可以抓取functions.php?感谢。

编辑:我得到的错误通常类似于“解析错误:语法错误,意外的$ end ...”,我相信这意味着脚本只是部分上传。这可能会使file_exists不是最好的解决方案,因为文件是THERE但它只是“中途”。

上传和重命名似乎是一个很好的解决方案,但每次上传都有点乏味:)我重新上传并测试了很多。

有没有办法检查PHP文件的PHP语法错误?在这种情况下,这将非常方便......

2 个答案:

答案 0 :(得分:1)

不要使用FTP,而是考虑一个PHP / Perl / Ruby脚本,该脚本将对要上载的文件进行POST,以及文件名和要替换的文件的MD5 / SHA(以确保您拥有所有内容)在文中)。您还需要添加一些安全性,例如Apache登录后面。

一旦PHP / Perl / Ruby脚本接受了发布的文件,md5被检查(并且安全性也被传递),服务器将覆盖" old"使用" new"版。这应该比FTP快很多,并减少错误。

唯一可能的问题是需要将服务器上的文件权限设置为允许来自Web服务器的写访问权。

只是一个想法。

另一个想法......

  • 上传到暂存目录
  • 使用ssh登录并执行mv /staging/<file> ./

你可以让一个cron工作每小时执行一次,也许。

答案 1 :(得分:0)

您可以执行以下操作:

1)如果function.php不存在,请使用抓取function2.php的代码

http://php.net/manual/en/function.file-exists.php

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

<?php
if(file_exists('function.php')){
    require_once 'function.php';
}else{
    require_once 'function2.php';
}
?>

2)更新文件时,删除function.php,然后将新文件上传到newfile.php,然后将newfile.php重命名为function.php

这样您就不会尝试获取半个上传文件,并且重命名非常快。

你可能会在file_exists和require_once之间出现错误(如果它存在则会被删除然后它会到达require_once并且它不再存在)。但希望这种情况不会经常发生。至少,如果发生这种情况,它将完全失败,并且他们可以重新加载页面。也许它不会发生。