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

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

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

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

WordPress

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

PHP

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

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

Q&A

1回答

1304閲覧

自己作成PHPファイルからワードプレスへの記事投稿。ブラウザで実行すると出来るものがcronに登録してcronから実行すると出来ない。

gugupoo

総合スコア31

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

WordPress

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

PHP

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

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

0グッド

0クリップ

投稿2019/06/18 01:55

さくらVPSにappache,php,phpMyAdmin,ワードプレス、等々をインストールしまして、
wp_insert_post関数を用いたphpファイルを作成して
cronで定期実行をしてワードプレスに投稿するプログラムを作成しています。

タイトルではブラウザで実行できるphpプログラムが、
cronに登録すると【出来ない】 と書かせて頂きましたが、
詳細については、【出来ないのではなくて、不十分な内容なら一応投稿される】、というものです。

具体的には、
自分のPCでグーグルクロームでPHPファイルを実行する →しっかりワードプレスに投稿される

全く同じものをVPSでcronに登録して定期実行の形で実行すると、
ワードプレスに、javascriptタグの宣言部分がカットされてしまい、閉じる方の</scirpt>等もカットされて
jqueryなどの記載した function云々がただのテキスト、文字として投稿されてしまい
javascript系が使えないというのが現在の抱えている問題点です。
そして追加実験としてcssタグもやってみましたが、
ブラウザ実行ではワードプレスに全て反映、
肝心なcronからの自動実行では反映されない、状態でした。

<style type="text/css">   ←ここ ~~~~~ ~~~~~~ </style>  ←ここ <script type="text/javascript">  ←ここ ~~~~~ ~~~~~~ ~~~~~~~~ </script>  ←ここ

「ここ」という場所が投稿されないため、ただのテキスト文字として記事に出てしまい、cssやjavascriptが反映されない状態です。

「ブラウザで実行できるものがcronだと投稿できない 失敗」
「ブラウザで投稿できるもの cronだと 失敗 wordpress」
などこういった形で検索をすると
自分とは違いましたが
cronからのメール送信が文字化けをする、などの例もあったりで
環境変数が違ったり、文字コードを正しく設定、などあり

なるほどなるほど・・など分かったような分からないような、↓こういった、
php.iniのmbstring.internal_encoding という場所をutf-8としてみたり
cronファイルの冒頭に、LANG=ja_JP.UTF-8と記載をしてみたり、

など見よう見まねで修正を試みてみましたが、
変わりませんでした。

ここで、
wp_insert_post関数を用いた方法でなく、その他外部作成APIプログラムなどあるかとは思いますし、
直接ワードプレスのデータ部分に INSERTしてしまうようなプログラムの作成の路線もあるとは少し検索したら
色々他路線もあるとは思うのですが、

現状、自分のPCのブラウザからは <script type="text/javascript"> と投稿できるものを
cronからも投稿できれば目標達成となりますので、
どうかご指導頂けたらと思います。よろしくお願い致します;

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

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

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

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

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

CHERRY

2019/06/18 02:46 編集

エラーや警告は、出ていないでしょうか? cron の場合は、cron を実行したユーザー宛にメールが送信されていると思われます。 もしくは、cron の実効ユーザーでログインして、cronで、実行しているコマンドを コマンドラインから入力して実行するとどうなるでしょうか? HTMLタグがエスケープされている等の感じもしますが、文章から原因を推測するより、ソースコード等を確認するほうが、原因を確認しやすい場合が多いので、ソースコードを質問に記載していただくことは可能でしょうか? (個人情報や ID / Password 等は適当な文字列に置き換えてください。)
gugupoo

2019/06/18 05:09

遅くなりまして申し訳ありません。 ///////////////////////////////////////////////////////////////////////////////////////////////// $text1 = " <style type='text/css'> body {background:red; } </style> <script src='http://code.jquery.com/jquery-1.12.4.min.js'></script> <script type='text/javascript'> var params = []; var param = location.search.substring(1).split('&'); for(var i = 0; i < param.length; i++) { params[i] = param[i].split('='); } var target = 'pattern'; var value; for(var i = 0; i < params.length; i++) { if(params[i][0] == target) { value = params[i][1]; break; } } switch (value) { case 'typeA': $(function(){ $(\"#site0\").css({\"color\":\"red\",\"font-size\":\"24px\",\"font-weight\":\"bold\"}); $(\".cs0\").insertAfter(\".cs3\"); var obj = $('.moto0').clone(); $('.h2c').after(obj); }); break; case 'typeB': $(function(){ $(\"#site1\").css({\"color\":\"red\",\"font-size\":\"24px\",\"font-weight\":\"bold\"}); $(\".cs1\").insertAfter(\".cs3\"); var obj = $('.moto1').clone(); $('.h2c').after(obj); }); break; </script> <div class=\"cs\"><span class=\"moto\">あいうえお</span></div> "; $text2 = ""; $posting = $text1.$text2; require_once( dirname( __FILE__ ) . '/wp-load.php' ); //実行時間の制限値を解除する set_time_limit(0); // ユーザーID $post_author = 1; // 記事データを用意 $posts_data = array( // 1記事目 array( 'title' => 'たいとる', // 記事タイトル 'content' => $posting, // 記事本文 'post_name' => 'スラッグ名1', // スラッグ 'category' => array(3), // カテゴリID(配列) 'tags' => array('タグ1','タグ2'), // タグの名前(配列) 'status' => 'publish', // 公開ステータス // postmetaのキーと値 'postmeta' => array( array('key1', '値1'), array('key2', '値2') ) ) ); // 記事データごとに展開 foreach($posts_data as $key => $post){ //投稿日時 $date = date('Y-m-d H:i:s'); // 記事データを作成 $post_value = array( 'post_author' => $post_author, // 投稿者のID 'post_title' => $post[title],// 投稿のタイトル 'post_name' => $post[slug], // スラッグ 'post_content' => $post[content], // 投稿の本文 'post_category' => $post[category], // カテゴリーID(配列) 'tags_input' => $post[tags], // タグの名前(配列) 'post_status' => $post[status], // 公開ステータス 'post_type' => 'post', // 投稿タイプ 'post_date' => $date // 投稿の作成日時 ); $insert_id = wp_insert_post($post_value); if($insert_id) { // postmetaデータごとに展開 foreach($post[postmeta] as $key => $postmeta){ // post_metaを作成 update_post_meta($insert_id, $postmeta[0], $postmeta[1]); }// postmetaのループ終了 // 記事データの作成に成功した場合の処理 echo ($i + 1).'件目の記事データの作成に成功しました。 '.$post[title].' '.$date.'<br>'; } else { // 記事データの作成に失敗した場合の処理 echo ($i + 1).'件目の記事データの作成に失敗しました。 '.$post[title].' '.$date.'<br>'; } $i++; } // 記事データのループ終了 ///////////////////////////////////////////////////////////////////////////////////////////////// おおよそこういった形で javascript jquery html文 wp_insert_postによる投稿 といった具合で続きます。 ブラウザで投稿されたワードプレスの記事ページのソース、 cronから実行された記事ページのソースを見ると 仰られたエスケープ、に関連する辺りが関わっているというあたりで 投稿されたページのソースは、 ブラウザ実行からワードプレスに投稿されたものは、右クリックソースを見てみると、 以下のようにそのままソース確認ができます。 $(function(){ $(\"#site1\").css({\"color\":\"red\",\"font-size\":\"24px\",\"font-weight\":\"bold\"}); $(\".cs1\").insertAfter(\".cs3\"); var obj = $('.moto1').clone(); $('.h2c').after(obj); }); cronで投稿された記事を右クリックソース確認すると↓このようにエスケープ、でしょうか;文字が処理されてしまっている具合です $(function(){ $(&quot;#site1&quot;).css({&quot;color&quot;:&quot;red&quot;,&quot;font-size&quot;:&quot;24px&quot;,&quot;font-weight&quot;:&quot;bold&quot;}); $(&quot;.cs1&quot;).insertAfter(&quot;.cs3&quot;); var obj = $(&#039;.moto1&#039;).clone(); $(&#039;.h2c&#039;).after(obj); }); そして加えて ↓↓こういったものはカットされてしまい、 <script type='text/javascript'> </script> <script src='http://code.jquery.com/jquery-1.12.4.min.js'></script> <style type='text/css'> </style> ↓↓こういったものは残ってしまう body {background:red; } という状態です。 ただエスケープの辺りが上記の解決の糸口といえど、それをうまく受けるという処理もあるのかとは思えますが、 ブラウザではエスケープ関連は問題にならず、cronでは問題になってしまうという・・ お手数おかけしてしまいますが、なんとかご指導ご鞭撻頂けたら、と思います・。 (cronでのエラー確認と cronの実行ユーザーでのログインしてからのコマンドラインからの実行の方は今から致します;)
guest

回答1

0

「cronに登録すると」の定義がわかりません
具体的にどんな感じの登録なのでしょうか?

wgetなどクローラを介してhttp経由で処理していますか?

投稿2019/06/18 03:09

yambejp

総合スコア114843

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

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

gugupoo

2019/06/18 05:12

用語をしっかりと使えておらずに申し訳ありません; crontabに * * * * ~~~.php 使用時刻、実行するファイル名などを記載して cronにファイルを実行させる、 といった事について述べさせて頂きましたが、 用語をしっかり把握できておらず、申し訳ありません・・;
yambejp

2019/06/18 05:26

> crontabに * * * * ~~~.php それはおそらくCLIモードといって違うロジックで動いています。 wgetなど適当なクローラを用意して wget http://exsample.com/hogehoge.php のようなアクセスをしてあげてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問