【问题标题】:How to run shell written in PHP on Windows?如何在 Windows 上运行用 PHP 编写的 shell?
【发布时间】:2011-12-29 18:42:15
【问题描述】:

我正在查看wpshell - shell,用 PHP 编写(用于 PHP 和 WordPress)。

它似乎是通过 bash 中的以下代码运行的:

#!/bin/bash

shell=$(dirname $(readlink -f $0))"/wpshell.php"

if [ -t 0 ]; then
    while [ true ]; do
        /usr/local/bin/php $shell
        if [ $? -eq 0 ]; then break; fi
    done
else
    set -f
    read -s input
    echo $input | /usr/local/bin/php $shell stdin
fi

如何适应 Windows 环境?如果可能的话。

【问题讨论】:

    标签: php windows bash shell


    【解决方案1】:

    让我们一块一块来看看

    • shell=$(dirname $(readlink -f $0))"/wpshell.php"

      • $0 是被调用的脚本。 $(cmd) 表示获取 cmd 的输出。
      • readlink -f 解析符号链接,因此 $(readlink -f $0) 在评估任何符号链接后找到正在运行的脚本的完整路径。
      • dirname /path/to/foo.sh 返回参数的路径(在本例中为 /path/to)。因此,$(dirname $(readlink -f $0)) 是解析所有链接后运行此脚本的目录的完整路径。

      • shell=$(dirname $(readlink -f $0))"/wpshell.php" 获取shell=$(dirname $(readlink -f $0)) 的输出并附加“/wpshell.php”。所以,这整行只是获得 wpshell.php 的完整路径

    • if [ -t 0 ]; then检查STDIN是否打开并引用终端,如果打开则进入if块

      • while [ true ]; do 永远循环,直到我们中断。因此,如果 wpshell 崩溃或出现错误退出,它将自动重新启动。
        • /usr/local/bin/php $shell 只是调用 php 并将它传递给我们之前找到的 wpshell 的路径。
        • if [ $? -eq 0 ]; then break; fi 检查最后一个命令 (/usr/local/bin/php $shell) 是否成功完成。 ?$ 是最后一条命令的返回码,我们检查它是否等于 0,表示没有错误。如果没有错误,wpshell 干净退出,所以我们完成了,可以跳出无限循环并退出。
    • else 如果 STDIN 不引用终端,则执行此块

      • set -f 禁用 glob 完成,因此不会扩展 * 之类的内容。
      • read -s input 从用户那里读取一个字符串并将其存储在input
      • echo $input | /usr/local/bin/php $shell stdin 将我们刚刚读取的内容作为输入发送到 wpshell,并告诉它从中读取

    大多数此功能在 Windows 上不可用。您很可能只需在 wpshell.php 上调用 php 即可。创建 wpshell.bat,并将"C:\path\to\php" "C:\path\to\wpshell.php" 放入其中。然后您可以运行 wpshell.bat 来运行 wpshell。

    【讨论】:

    • 我尝试在命令行模式下运行它,但它似乎也引用了 Linux 命令和 PHP 代码中的 bash。 :( 总体而言,如果不重写,它似乎无法移植到 Windows。
    • andlinux.org,您可能对此有一些运气,但它仍然需要一些魔法才能使其全部正常工作。
    猜你喜欢
    • 1970-01-01
    • 2016-05-25
    • 2018-05-23
    • 2019-01-28
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    相关资源
    最近更新 更多