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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

891閲覧

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

NOBUTUNA

総合スコア11

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/03/16 16:21

編集2019/03/17 02:29

前提・実現したいこと

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

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

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

■追記テスト

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コマンドライン上で実行するのと、ページ遷移時に実行されるのとで挙動が変わっているようです。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2019/03/16 21:52

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

2019/03/17 01:13

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

回答1

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

投稿2019/03/17 10:09

NOBUTUNA

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問