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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

513閲覧

ブラウザ上のPHPでpythonを実行したい

har_io

総合スコア16

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/08/29 04:54

編集2022/08/29 07:31

やりたいこと

exec関数を使いpythonを実行し、実行結果を取得したい。

実行環境

os:mac
ブラウザ:breve
PHPエンジン:MAMP

やったこと

php

1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Document</title> 8</head> 9<body> 10 <?php 11 12 $command='python /フルパス.py'; 13 exec($command, $output); 14 15 echo $output; 16 17 ?> 18</body> 19</html>

python

1a=1 2b=3 3c=a+b 4 5print(c);

私がやりたいことはphpでpythonの実行結果(c)を取得し、
phpでechoしたいのですが「Warning: Undefined array key 0」が出て失敗してしまいます。

コマンドラインでphpを実行すると取得できているので、パスとかが違うんですかね???
(コマンドラインでの実行結果: 4 //本当はhtmlの雛形も表示されるのですが、ややこしくなるので省略しました。)

ご存じの方がいらっしゃればご教授いただけると幸いです。

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

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

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

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

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

kazto

2022/08/29 05:36

> Warning: Undefined array key 0 というエラー文が示すとおり、Arrayでないものに対して `[0]`で配列アクセスしようとしていることが原因です。 `[0]`をつけた意図はなんでしょうか。
har_io

2022/08/29 05:41 編集

すいません! 質問用のコードとは別にメインで作っているファイルがあるのですが、 そのメインファイルからコピーして取ってきたので [0]をつけてしまいました... 修正しておきます。
AbeTakashi

2022/08/29 06:29

プログラムを修正したならエラーの内容が変わったと思いますので、その情報も質問文に追加してください。第三者はそのエラー情報(エラーメッセージやエラーログ)がないと判断つかない内容かと思います。
har_io

2022/08/29 06:51

エラー情報に変わりはありません。 teratailに載せるコードが間違っていただけでしたので...
kazto

2022/08/29 07:05

> エラー情報に変わりはありません。 これは、本当でしょうか。コードが変われば、挙動が変わるのが通常です。 エディタの保存忘れなどありませんでしょうか。 MAMPで実行しているとのことで、ウェブサーバで表示するファイルが適切に更新できているか、を疑った方がいいかもしれません。
har_io

2022/08/29 07:25

teratailに載せるコードが間違っていただけなのでエラー情報に変わりはありません。 誤解を生むような発言をしてしまい申し訳ございませんでした。
kazto

2022/08/29 07:36

では、質問を変えます。 コマンドラインで実行し、4が表示されたファイルと、MAMP上にデプロイしたファイルは同一ですか? diffコマンド等で同一である証拠を確認してください。
har_io

2022/08/29 07:38

同一ファイルです。
kazto

2022/08/29 07:41

それが、本当かを疑っています。なので、diffによる証拠を、とお願いしています。
har_io

2022/08/29 12:15

ですから、同じphpファイルをコマンドラインとブラウザでテストしています。 私の間違いでなければdiffは2つ以上のファイルを同一ファイルか確認するコマンドですよね? 一つのファイルをdiffコマンドで確認? 申し訳ございませんが、よくわかりません。
AbeTakashi

2022/08/29 15:52

「Warning: Undefined array key 0」が出てるということは、少なくともkaztoさんが指摘した部分が解決してないように見えるんですよね。少なくとも現状のソースコードでその警告が出そうなところがないので、第三者には意味が分からないし、これ以上のアドバイスのしようがないという状況です。何かしら全然関係ないところで勘違いをされているのでは?という気もします。 なお、この警告はあくまでも「警告」で「エラー」ではないので、Pythonが実行できないという問題とは関係ない可能性もあります。再度書きますが、サーバのApacheのエラーログなどを参照して原因を見つける方が解決が早い気がします。
guest

回答1

0

自己解決

解決方法

execコマンドのところにpythonのフルパスを記述したところ、
エラーが出ずにarray型で取得することができました。

修正依頼について

(修正依頼にあったファイル違い、arrayが存在しないなどとは関係なく
ブラウザでは実行しているユーザーが違うためパスが通っていなかったのが原因でした。)

php

1$cmd = "/pythonのフルパス/python test.py"; 2exec($cmd, $opt, $stu); 3foreach($opt as $opv){ 4 echo $opv."<br>"; 5} 6//実行結果: 4

python

1a=1 2b=3 3c=a+b 4 5print(c);

投稿2022/08/29 16:04

編集2022/08/29 16:05
har_io

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問