前提・実現したいこと
WP-CLIを使用し、WordPressに記事を投稿したいが、以下のようにPHPで実行時のみ投稿することができない。
localではPHPでの実行/コマンド上での実行、問題なくできており、MixHost環境でもコマンド上では問題なくできているが、PHPから passthru() 関数を使用しコマンドを実行すると、エラーが発生し正しく動作しない。
発生している問題・エラーメッセージ
[16-Mar-2019 15:42:16 UTC] PHP Warning: Use of undefined constant STDOUT - assumed 'STDOUT' (this will throw an Error in a future version of PHP) in phar:///home/gqrfvmyf/bin/wp-cli.phar/vendor/wp-cli/wp-cli/php/utils.php on line 1002 [16-Mar-2019 15:42:16 UTC] PHP Warning: Use of undefined constant STDERR - assumed 'STDERR' (this will throw an Error in a future version of PHP) in phar:///home/gqrfvmyf/bin/wp-cli.phar/vendor/wp-cli/wp-cli/php/WP_CLI/Loggers/Regular.php on line 50 [16-Mar-2019 15:42:16 UTC] PHP Warning: fwrite() expects parameter 1 to be resource, string given in phar:///home/gqrfvmyf/bin/wp-cli.phar/vendor/wp-cli/wp-cli/php/WP_CLI/Loggers/Base.php on line 61
該当のソースコード
PHP
1 $date = date("Y年m月d日H時"); 2 $title = "$date の状況"; 3 $category_id = 2; 4 $user_name = WPUSERNAME; 5 $tag = 'リスト'; 6 $status = 'publish'; 7 $url = 'stock_list'; 8 9 $scraping_obj = new Scraping(); 10 $sql_obj = new Sql(); 11 $file_path = $scraping_obj->getScrapingFile('wordpress', 'read'); 12 $create_data = "$file_path --post_title=\"$title\" --post_category=$category_id --user=$user_name --tags_input=$tag --post_status=$status --post_name=\"$url\""; 13 14 $wp_cli_command = "cd ../../blog && /home/gqrfvmyf/bin/wp-cli.phar post create $create_data"; 15 16 passthru($wp_cli_command);
補足情報(FW/ツールのバージョンなど)
■$wp_cli_command に入っている文字列
cd ../../blog && /home/gqrfvmyf/bin/wp-cli.phar post create ../revival-stock-check/ready/result/2019_03_17/00.txt --post_title="2019年03月17日00時 の状況" --post_category=2 --user=admin --tags_input=リスト --post_status=publish --post_name="stock_list"
■passthru関数実行時、以下が出力されています(local環境や、コマンド直うち時は発生しない)
Content-type: text/html; charset=UTF-8
(他の環境では成功するため、 "Success: Created post {数字}" が返ってくる)
■事象が発生している環境
MixHostサーバー
PHP 7.2.14
■同じソースコードで問題なく実行できる環境
MAMP
PHP 7.1.23
■
$wp_cli_commandに格納されている文字列をコマンドライン上で直打ちすると記事は投稿されており、なぜPHPで実行すると正しく処理が行えないのか原因がつかめずにおります。
local環境では問題なく記事は投稿されるため、MixHost側で何か設定を変える必要があるのかなどを調べましたが、私の力では解決まで導区ことができませんでした。
■追記テスト
php
1<?php 2$test = "cd ../../blog && /home/gqrfvmyf/bin/wp-cli.phar post create \"../revival-stock-check/ready/result/2019_03_17/11.txt\" --post_title=\"2019年03月17日11時 の在庫状況\" --post_category=2 --user=admin --tags_input=在庫リスト --post_status=publish --post_name=\"stock_list\""; 3passthru($test);
該当のエラーが発生している箇所と同じディレクトリに上記ファイルを作成し、以下コマンドで実行したところ成功いたしました。
php test.php
ですが、URL にて http://*******/test.php
にて遷移し test.php を実行したところ、Content-type: text/html; charset=UTF-8 が出力され、記事は投稿されませんでした。
PHPコマンドライン上で実行するのと、ページ遷移時に実行されるのとで挙動が変わっているようです。
回答1件
あなたの回答
tips
プレビュー