Выполнять команды WP CLI в сценарии PHP - PullRequest
0 голосов
/ 11 декабря 2019

Для этого я скопировал репозиторий WP CLI в Root WordPress

И написал следующий код PHP для его кодирования и обнаружил следующие ошибки

define('WP_CLI_ROOT', ABSPATH . 'wp-cli');
require_once WP_CLI_ROOT . '/php/wp-cli.php';
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

Спасибозаранее за вашу помощь

1 Ответ

1 голос
/ 11 декабря 2019

WP-CLI может корректно работать только под PHP cli SAPI, а не под API веб-сервера, таким как cgi, apache или аналогичным. У этого есть некоторые технические причины, но это также напрямую связано с безопасностью вашего сервера.

WP-CLI - это консольное приложение

Первая техническая причина заключается в том, что WP-CLI является консольным приложением и предполагает доступ к входным (STDIN) и выходным (STDOUT) потокам консоли. В контексте веб-сервера, под которым работает WordPress, они не существуют. «Входными данными» для веб-сервера является URL-адрес и полезная нагрузка веб-запроса, а выходными данными является HTML или JSON, который отправляется обратно в браузер.

WP-CLI - это оболочка для WordPress

Вторая техническая причина заключается в том, что WP-CLI по сути является «хаком», который «оборачивает» всю установку WordPress и выполняет ее как подпрограмму в своем собственном процессе. Если вы попытаетесь использовать WordPress для запуска WP-CLI, у вас возникнет проблема «курица и яйцо» или программная интерпретация «Начало».

WP-CLI - это инструмент sysadmin

Причина, по которой это также имеет непосредственное отношение с точки зрения безопасности, заключается в том, что WP-CLI в широком смысле является инструментом sysadmin. Он будет напрямую создавать, изменять, удалять файлы, делать прямые запросы к базе данных и многое другое. Все его операции могут обходить любые меры безопасности, которые могли быть введены в действие на уровне приложения WordPress и его плагинами. Если сделать WP-CLI доступным для внешнего интерфейса и активировать его с помощью веб-запросов, это превратит его в критическую уязвимость безопасности. Никакой инструмент администрирования на стороне сервера не должен быть открыт для внешнего интерфейса каким-либо образом.

Надеюсь, это объясняет, почему то, что вы хотите сделать, не может быть сделано, и почему вы не захотите, если можете.

...