php - 有什么方法可以在 virtualbox vm 中运行 php 来运行 sublime text linter?

标签 php virtualbox

我正在使用 sublime text 2,我想使用插件 sublimelinter。它使用 php -l 在后台检查代码。我正在使用在 VirtualBox VM 中运行的网络服务器进行开发,网络服务器在 VM( guest )中,而 sublime text 在主机上运行。

有什么方法可以让这两个一起工作?我真的很想避免在 VM 之外安装 php。

最佳答案

我有一些东西在我的机器上运行得相当好,但它看起来很脆弱。

理念

这里的想法是在您的主机上创建一个命令行脚本,通过 SSH 隧道将其所有参数传递给您 VM 上的 PHP 调用。然后 SublimeLinter 可以调用这个脚本,就像它通常调用 PHP 二进制文件一样,从 Sublime 的角度来看,一切都将“正常工作”,而无需在您的主机上安装 PHP。

我同时使用 Windows 和 OS X 主机,所以我有两个版本的隧道脚本。请注意,在 Windows 上,您需要获取 Windows PuTTY SSH 工具,但对于 Unix 风格的主机,SSH 可能已经存在。

对于 Windows 主机

  • 下载putty工具并将它们解压缩到有用的地方,例如 C:/Users/Youruser/bin/putty
  • 使用以下内容在 C:/Users/Youruser/bin/php_vm_tunnel.bat 创建批处理脚本:

    @echo off
    C:/Users/Youruser/bin/putty/plink -l youruser -pw yourpassword 192.168.56.101 php %*
    

注意 - 确保将 plink 的路径替换为您在上面解压缩 putty 的正确路径。此外,将 -l-pw 标志值替换为您在通过 SSH 连接到 VM 时使用的用户名和密码。最后,确保将示例中的 IP 地址替换为您用于通过 SSH 连接到虚拟机的 IP 地址。

对于 Unix-ish 主机(OS X、Linux 等)

  • ~\bin\php_vm_tunnel

    创建 bash 脚本
    #!/usr/bin/env bash
    FIXED_ARGS='';
    for (( i = 1; i <= $# ; i++ )); do
        eval ARG=\$$i
        FIXED_ARGS="$FIXED_ARGS $(echo "$ARG" | awk '{gsub(".", "\\&");print}')"
    done
    ssh -l root 192.168.56.101 php $FIXED_ARGS
    

注意 - 请务必将 -l 标志值替换为您在通过 SSH 连接到 VM 时使用的用户名。此外,请务必将示例中的 IP 地址替换为用于通过 SSH 连接到虚拟机的 IP 地址。

测试脚本

此时,您已经有了一个脚本,它可以将您传递给它的任何内容通过隧道传送到您的 VM。因此,如果您要在终端中执行此操作,请说:

cd wherever_you_put_the_script 
php_vm_tunnel -v

您应该会看到从您的虚拟机返回的 PHP 版本信息。

Sublime Text 2 配置

现在你已经设置了这个隧道,你可以配置 Sublime Text 2 来使用它:

  • 安装 Package Control Sublime Text 2 插件
  • 安装 SublimeLinter 插件(听起来您已经安装好了)
  • 转到 Preferences -> Package Settings -> SublimeLinter -> Settings - User
  • 将其添加到配置文件(再次替换为脚本的正确路径并注意双斜杠以正确转义反斜杠字符)并保存:

    {
        "sublimelinter_executable_map":
        {
            "php": "C:\\\Users\\\Youruser\\\bin\\\php_vm_tunnel.bat"
            "php": "/Users/youruser/bin/php_vm_tunnel"
        }
    }
    

    注意 - 您只能有一个“php”语句。上面第一个是Windows版本,第二个是Unix版本。删除不需要的。

  • 重启 Sublime Text

如果您打开 Sublime Text 控制台(一切都按计划进行),您应该会在启动文本中看到如下内容:

SublimeLinter: php enabled (using "C:\Users\Youruser\bin\php_vm_tunnel.bat" for executable)

并且 SublimeLinter 应该正确地检查 PHP 文件,就好像它在调用 native PHP 二进制文件一样。

祝你好运。

关于php - 有什么方法可以在 virtualbox vm 中运行 php 来运行 sublime text linter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12355149/

相关文章:

php - MYSQL在PHP中仅询问第一排名时不返回结果

Android 4.3 与 Genymotion uvesafb : failed to execute/sbin/v86d

virtualbox - 如何设置VirtualBox bios UUID

python - 无法将 Django 管理命令添加到我的开发环境中的项目

android - 无法使用 usb 直通 Virtualbox 将访客的 adb 连接到硬件设备

PHP 脚本可以在笔记本电脑上运行,但不能在服务器上运行

php - 使用 mysql_fetch_assoc 时如何跳过一行?

javascript - 如何使用ajax更新数据库中的记录并在单击按钮时删除表行?

windows-10 - 尝试在 virtualbox 上运行 macOS Catalina 10.15 时卡在 EFI shell 上

php - Laravel SQLSTATE[42000] : Syntax error or access violation