質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.93%

WP-CLI を PHPで実行時のエラー

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,043

NOBUTUNA

score 11

前提・実現したいこと

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

該当のソースコード

            $date           = date("Y年m月d日H時");
            $title          = "$date の状況";
            $category_id    = 2;
            $user_name      = WPUSERNAME;
            $tag            = 'リスト';
            $status         = 'publish';
            $url            = 'stock_list';

            $scraping_obj = new Scraping();
            $sql_obj      = new Sql();
            $file_path   = $scraping_obj->getScrapingFile('wordpress', 'read');
            $create_data = "$file_path --post_title=\"$title\" --post_category=$category_id --user=$user_name --tags_input=$tag --post_status=$status --post_name=\"$url\"";

            $wp_cli_command = "cd ../../blog && /home/gqrfvmyf/bin/wp-cli.phar post create $create_data";

            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側で何か設定を変える必要があるのかなどを調べましたが、私の力では解決まで導区ことができませんでした。

■local環境 phpinfo() の結果
イメージ説明

■MixHost側 phpinfo() の結果
イメージ説明

■追記テスト

<?php
$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\"";
passthru($test);


該当のエラーが発生している箇所と同じディレクトリに上記ファイルを作成し、以下コマンドで実行したところ成功いたしました。
php test.php

ですが、URL にて http://***/test.php
にて遷移し test.php を実行したところ、Content-type: text/html; charset=UTF-8 が出力され、記事は投稿されませんでした。
PHPコマンドライン上で実行するのと、ページ遷移時に実行されるのとで挙動が変わっているようです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • CHERRY

    2019/03/17 06:52

    それぞれの状況で phpinfo() を実行した際に設定の違いはないでしょうか?

    キャンセル

  • NOBUTUNA

    2019/03/17 10:13

    返答ありがとうございます!
    それぞれの環境のphpinfo()結果を添付致しました。
    所々設定の違いがありますが、どの部分が原因と直結しているのかは判断がつきませんでした。

    キャンセル

回答 1

check解決した方法

0

自己解決できましたので記載いたします

https://teratail.com/questions/110316
こちらの内容を参考にし、取り組みました。

/home/gqrfvmyf/bin/wp-cli.phar post create


上記コードを以下に修正することで解決できました

/usr/local/bin/php /home/gqrfvmyf/bin/wp-cli.phar post

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る