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

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

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

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

PHP

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

Q&A

0回答

2533閲覧

phpのexecでnodeを実行させたい

takakoppu

総合スコア6

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

PHP

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

0グッド

1クリップ

投稿2019/08/02 01:17

編集2019/08/03 00:11

ブラウザで「Node発火ボタン」を押すと$cmdのコマンドを発動させたいのですが、動きません。
▼top.php

<?php function autocsd() { $cmd = "/usr/local/bin/node /var/www/html/test/autoCsd.js"; exec($cmd, $opt, $return_ver); var_dump($opt); echo '実行結果:'.$return_ver; } if (isset($_GET['func'])) { autocsd(); } ?> <a href='top.php?func=true'>Node発火ボタン</a>

▼autoCsd.js

const puppeteer = require('puppeteer'); // 定数 (後述) const LOGIN_URL = 'xxx'; const LOGIN_ACCOUNT = 'xxx'; const LOGIN_USER = 'xxx'; const LOGIN_PASS = 'xxx'; const TARGET_URL = 'xxx'; const LOGIN_ACCOUNT_SELECTOR = 'input[name="loginidfield"]'; const LOGIN_USER_SELECTOR = 'input[name="accountidfield"]'; const LOGIN_PASS_SELECTOR = 'input[name="passwordfield"]'; const LOGIN_SUBMIT_SELECTOR = 'input[name="submit"]'; (async () => { const browser = await puppeteer.launch({//ブラウザを開く args: ['--no-sandbox', '--disable-setuid-sandbox'], headless: false, // ブラウザを表示するか (デバッグの時は false にしたほうが画面が見えてわかりやすいです) }); const page = await browser.newPage(); // 新規ページ await page.setViewport({ width: 1440, height: 900 }); // ビューポート (ウィンドウサイズ) await page.setExtraHTTPHeaders({ // 必要な場合、HTTPヘッダを追加 'Accept-Language': 'ja' }); // ログイン画面でログイン await page.goto(LOGIN_URL, { waitUntil: 'domcontentloaded' }); await page.type(LOGIN_ACCOUNT_SELECTOR, LOGIN_ACCOUNT); // アカウント名入力 await page.type(LOGIN_USER_SELECTOR, LOGIN_USER); // ユーザー名入力 await page.type(LOGIN_PASS_SELECTOR, LOGIN_PASS); // パスワード入力 await Promise.all([ // ログインボタンクリック // クリック後ページ遷移後通信が完了するまで待つ (ページによっては 'domcontentloaded' 等でも可) page.waitForNavigation({ waitUntil: 'networkidle0' }), page.click(LOGIN_SUBMIT_SELECTOR), ]); // ログイン後の画面に移動 await page.goto(TARGET_URL); await Promise.all([ page.waitForNavigation({ waitUntil: 'networkidle0' }), page.click('#navi03 a'), ]); await page.select('select[name="fsForwardStatus"]','02'); //検索をクリック await page.click('input[name="imageField42"]'); await page.select('select[name="fsDownloadCode"]','02'); //ダウンロードをクリック await page.click('input[name="imageField4"]'); await sleep(1000); await browser.close(); })();

▼実行結果
array(0) { } 実行結果:0 Run PHP Function

autCsd.jsはpuppeteerで自動ログイン処理とCSVダウンロードを実行するファイルです。
コマンドで直接叩くと正常に動きます。

是非ご指摘いただきたく思います。
よろしくお願い致します^^

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

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

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

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

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

m.ts10806

2019/08/02 01:23 編集

同サーバー内ですか? また、 /node[ ]/var ↑の空白は何でしょう?
takakoppu

2019/08/02 02:06

ご回答ありがとうございます。 同サーバー内です。 空白の左側はnodeの絶対パス。 空白の右側は実行ファイルの絶対パスとなります。 空白は不要でしょうか?
m.ts10806

2019/08/02 02:09

すみません。理解しました。 引数ですね。 ディレクトリに空白が?とちょっと混乱してました。
showkit

2019/08/02 03:31

autCsd.js は、コマンドで直接たたくと動くとのことで・・・。では php ソースファイル名.php で(ソースファイルを少しいじる必要があるかと思いますが・・・)実行してみると 何かわかるのでは?
takakoppu

2019/08/02 08:46

ご回答ありがとうございます。 コマンドで上記の上記のphpファイルをコマンドで実行すると、 <a href='top.php?func=true'>Node発火ボタン</a> が表示されます。
showkit

2019/08/02 09:02

あ~ ですので <a>~</a> の部分を削除したファイルを作成して php?func=1 かなんかで 実行してみてください autCsd.js を実行しているようでしたら autCsd.js にログをいれると 何かわかりそうな気がします。
mikkame

2019/08/02 09:04

実行結果が0なら正常終了しているのでは? > 発動させたいのですが、動きません 動いた結果、どう動かないのでしょうか? CSVがブラウザにダウンロードされないのでしょうか? それとも、CSVがダウンロード(テンポラリDIRとかに)されないのでしょうか? そもそもautCsd.jsは標準出力があるのでしょうか?
takakoppu

2019/08/02 23:38

ご回答ありがとうございます。 autoCsd.jsのコードを追記しております。 通販サイトにヘッドレスchromeでログイン、csvダウンロードまでをpupeteerで行う処理となります。 csvがダウンロードされません。
takakoppu

2019/08/02 23:49

<a>~</a>を削除してコマンドで実行すると下記の結果となります。 [root@php7]# php top.php?func=1 Could not open input file: top.php?func=1
mikkame

2019/08/03 07:42

?func=1まで書いてあるからfile not found になるんでしょ 標準出力がなさそうだから実行結果:0 Run PHP Functionでも問題無いように見える
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問