如何在NetBeans(PHP)中将所有打开的文件上载到远程主机

时间:2016-08-21 01:50:56

标签: php netbeans web-deployment

我在各种目录中编辑了几十个文件,我首先要将它们上传到测试服务器,然后再上传到生产服务器(NetBeans中设置的不同连接)。

编辑:由于服务器特定的原因,我也不能使用版本控制。我只有FTP访问权限。甚至不是SFTP。也没有shell。)

因此,在NetBeans中,我们可以通过键盘快捷键或上下文菜单轻松上传单个文件或递归目录。

过去我使用键盘快捷键上传当前文件,然后按CTRL + W,然后重复直到所有文件都完成。但由于我想上传到两台服务器,这不是一个选择。此外,当文件很多时,任何方式都会非常不方便。

使用NetBeans同步似乎也不是一种选择,因为在我的源代码中有成千上万的文件。单独上传目录也可能有超过10,000个文件(这是FTP服务器愿意服务的限制,我无法重新设计系统以避免在单个目录中包含太多文件)。

我想我可以使用已编辑的文件计算所有目录,并尝试同步它们而不是整个源,但这也不是一件容易的事,因为打开了几十个文件(我必须将鼠标悬停在每个选项卡上看看它来自哪个目录)。即便如此,NetBeans的同步也是一种手动体验。

有人建议使用半自动(至少)方法上传当前活动标签中打开的文件吗?

我还想避免因为远程有数GB的内容而需要比较本地和远程的完整内容。

本地的一些文件也与远程文件不同,必须保持这种方式(特定于服务器的配置)。这些显然不属于当前打开的文件。

1 个答案:

答案 0 :(得分:1)

注意:此解决方案适用于Windows,并假定要上载的文件是此项目中的所有打开文件。

所以,这不是我想要的理想解决方案,但它解决了我的问题。

首先,我们可以通过执行此操作获取当前打开项目的文件列表(注意:虽然这与在选项卡中打开的文件不完全相同,但足以满足解决我的问题,因为我有一个单独的选项卡,用于所有与此特定项目相关的文件):

  1. 打开NetBeans项目文件夹
  2. 在项目文件夹中,打开 nbproject \ private \ private.xml
    它将有一个为该项目打开的文件列表,例如:

    <file>file:/W:/xampp/htdocs/index.php</file>
    <file>file:/W:/xampp/htdocs/templates/main.html</file>
    <file>file:/W:/xampp/htdocs/js/jquery.js</file>
    
  3. 将其复制到单独的文本文件并切断到远程root(htdocs)级别的路径 不要忘记修改斜杠,例如:

    index.php
    templates\main.html
    js\jquery.js`
    

    现在我们有了文件列表,我们可以将它们包括目录结构复制到一个临时位置,我们将把它们上传到FTP

  4. 使用以下内容创建批处理文件 prepare-patch.bat

    @echo off
    SETLOCAL EnableDelayedExpansion
    for /F "tokens=*" %%A in ('type %1') do (
        set original_path=%~2%%A
        set destination_path=%~3%%A
        echo Copying `!original_path!` to `!destination_path!`
        echo f | xcopy /Y /Q "!original_path!" "!destination_path!"
    )
    

    需要3个参数:
    1)文件列表的路径
    2)htdocs root的路径 3)临时目录的路径

  5. 像这样使用:

    w:\prepare-patch.bat "D:\work\patched_files.txt" "w:\xampp\htdocs\" "w:\temp\"
    
  6. 现在,临时目录包含具有完整文件夹结构的所有文件:

    w:\>dir /s /b w:\temp
    w:\temp\index.php
    w:\temp\js
    w:\temp\templates
    w:\temp\js\jquery.js
    w:\temp\templates\main.html
    

    您可以连接到FTP,导航到htdocs root,只需从此临时目录上传覆盖。

    当然,这比理想情况要多得多,但是当你有几十个文件时,它仍然比逐个上传文件更快。