在 PHP 脚本中执行 WP CLI 命令

Moh*_*lmi 1 php wordpress wp-cli

为此,我将存储库 WP CLI 复制到根 WordPress

我编写了以下PHP代码对其进行编码并遇到了以下错误

define('WP_CLI_ROOT', ABSPATH . 'wp-cli');
require_once WP_CLI_ROOT . '/php/wp-cli.php';
Run Code Online (Sandbox Code Playgroud)
Warning: include_once(D:\Web\Sites\jupiterx/wp-cli/vendor/rmccue/requests/library/Requests.php): failed to open stream: No such file or directory in D:\Web\Sites\jupiterx\wp-cli\php\WP_CLI\Bootstrap\IncludeFrameworkAutoloader.php on line 48

Warning: include_once(): Failed opening 'D:\Web\Sites\jupiterx/wp-cli/vendor/rmccue/requests/library/Requests.php' for inclusion (include_path='C:\xampp\php\PEAR') in D:\Web\Sites\jupiterx\wp-cli\php\WP_CLI\Bootstrap\IncludeFrameworkAutoloader.php on line 48

Warning: include_once(D:\Web\Sites\jupiterx/wp-cli/vendor/wp-cli/mustangostang-spyc/Spyc.php): failed to open stream: No such file or directory in D:\Web\Sites\jupiterx\wp-cli\php\WP_CLI\Bootstrap\IncludeFrameworkAutoloader.php on line 49

Warning: include_once(): Failed opening 'D:\Web\Sites\jupiterx/wp-cli/vendor/wp-cli/mustangostang-spyc/Spyc.php' for inclusion (include_path='C:\xampp\php\PEAR') in D:\Web\Sites\jupiterx\wp-cli\php\WP_CLI\Bootstrap\IncludeFrameworkAutoloader.php on line 49

Warning: array_slice() expects parameter 1 to be array, null given in D:\Web\Sites\jupiterx\wp-cli\php\WP_CLI\Runner.php on line 905

Warning: Invalid argument supplied for foreach() in D:\Web\Sites\jupiterx\wp-cli\php\WP_CLI\Configurator.php on line 138

Warning: implode(): Invalid arguments passed in D:\Web\Sites\jupiterx\wp-cli\php\WP_CLI\Runner.php on line 1024

Fatal error: Uncaught Error: Class 'cli\Colors' not found in D:\Web\Sites\jupiterx\wp-cli\php\WP_CLI\Loggers\Regular.php:70 Stack trace: #0 D:\Web\Sites\jupiterx\wp-cli\php\class-wp-cli.php(881): WP_CLI\Loggers\Regular->error_multi_line(Array) #1 D:\Web\Sites\jupiterx\wp-cli\php\WP_CLI\Runner.php(248): WP_CLI::error_multi_line(Array) #2 D:\Web\Sites\jupiterx\wp-cli\php\WP_CLI\Runner.php(1083): WP_CLI\Runner::set_wp_root('D:\\Web\\Sites\\ju...') #3 D:\Web\Sites\jupiterx\wp-cli\php\WP_CLI\Bootstrap\LaunchRunner.php(23): WP_CLI\Runner->start() #4 D:\Web\Sites\jupiterx\wp-cli\php\bootstrap.php(74): WP_CLI\Bootstrap\LaunchRunner->process(Object(WP_CLI\Bootstrap\BootstrapState)) #5 D:\Web\Sites\jupiterx\wp-cli\php\wp-cli.php(27): WP_CLI\bootstrap() #6 D:\Web\Sites\jupiterx\wp-content\plugins\tabanShahrSiteSaz\Plugin.php(72): require_once('D:\\Web\\Sites\\ju...') #7 D:\Web\Sites\jupiterx\wp-content\plugins\tabanShahrSiteSaz\app\core\SingletonPattern.php(26): TabanShahrSiteSaz\Plugin->includes() #8 D:\Web\Sites\jupiterx\wp-conten in D:\Web\Sites\jupiterx\wp-cli\php\WP_CLI\Loggers\Regular.php on line 70
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助

小智 5

WP-CLI 只能在 PHP SAPI 下正确运行,而不能在类似或类似cli的 Web 服务器 API 下运行。这有一些技术原因,但也直接关系到你服务器的安全。cgiapache

WP-CLI 是一个控制台应用程序

第一个技术原因是 WP-CLI 是一个控制台应用程序,它假定可以访问控制台输入 ( STDIN) 和输出 ( STDOUT) 流。在 WordPress 运行的 Web 服务器上下文中,这些不存在。Web 服务器的“输入”是 Web 请求的 URL 和负载,输出是发送回浏览器的 HTML 或 JSON。

WP-CLI 是 WordPress 的包装器

第二个技术原因是 WP-CLI 基本上是一种“黑客”,它“包装”整个 WordPress 安装并将其作为子例程在自己的进程中执行。如果您尝试使用 WordPress 启动 WP-CLI,您就会遇到先有鸡还是先有蛋的问题,或者是“Inception”的软件解释问题。

WP-CLI 是一个系统管理工具

这与安全性直接相关的原因是,从最广泛的意义上来说,WP-CLI 是一个系统管理工具。它将直接创建、修改、删除文件,对数据库进行直接请求等等。它的所有操作都可以绕过 WordPress 及其插件在应用程序级别可能实施的任何安全措施。让面向公众的前端可以访问 WP-CLI 并让它通过 Web 请求触发,将会使其成为一个严重的安全漏洞。任何服务器端管理工具都不应该以任何方式暴露给前端。

希望这能解释为什么你想做的事无法完成,以及为什么即使可以做你也不想做。