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

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

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

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

Python

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

Q&A

1回答

1379閲覧

phpからpythonの仮想環境切り替え

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

Python

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

0グッド

0クリップ

投稿2020/01/21 11:41

編集2020/01/21 12:18

phpで作成したサイトから画像を投稿させ、python(anaconda pronptで作成しました)で画像認識し、
結果をoutput.phpで表示する、というものを作りたいのです。
作成した.pyファイルはactivate tensorflowで仮想環境を切り替えてからcdしてから実行します。
phpから仮想環境を切り替える方法はありますか?

調べたところexec関数というものがあることを知り、phpのoutput側に
$cmd='activate tensorflow';
exec($cmd);
のようにしてみましたが何も表示されませんでした
(第3引数が0になってしまいます。)

output.php

1if(move_uploaded_file($_FILES['pic']['tmp_name'],'画像のフルパス')) { 2 echo 'アップロード完了'; 3 4 $cmd="activate tensorflow" 5  $cmd2="cd ~" 6 $cmd3="python main.py" 7  8 exec($cmd) 9 exec($cmd2) 10 exec($cmd3,$output) 11 12 foreach($output as $print){ 13 echo $print; 14 } 15}

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

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

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

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

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

m.ts10806

2020/01/21 11:52

前の質問を放っておいてできる質問ではないと思いますけど。 https://teratail.com/questions/236503 このようなやり方をしていると誰も手を差し伸べなくなると思います。
退会済みユーザー

退会済みユーザー

2020/01/21 12:18

アドバイスありがとうございます。追記しました。
m.ts10806

2020/01/21 12:20

前の質問を放置と言うスタンスも「このようなやり方」に含んでいます。
退会済みユーザー

退会済みユーザー

2020/01/21 12:50

そうですね、失礼いたしました...
dameo

2020/01/21 23:21

質問の放置はいけませんし、前の質問も酷いと思いましたが、とりあえず… test.batを作成して、 @call C:\Users\ユーザー名\Anaconda3\Scripts\activate.bat 環境名 @python hoge.py @conda deactivate みたいな記述をすればコマンドプロンプトから実行できると思います。 これを同じ実効ユーザーでphpからexecしてあげられれば恐らく実行できるのではないかと思います。 windows上にphpを入れてないので確認はしてません。
退会済みユーザー

退会済みユーザー

2020/01/22 14:55

ありがとうございます。試しましたが、どうしても第三引数が1になってしまいできませんでした,,
dameo

2020/01/22 15:28 編集

多分書いている内容が伝わっていないのですね。 phpのexecはプロセスを起動する関数なので、$cmdと$cmd2と$cmd3はそれぞれ別プロセスとして起動します。 なので、$cmdでactivateしても$cmd2のときにはどの環境にも入っていません。 1つのプロセスで実行する必要があるのです。 そのため、今回はtest.batというバッチファイルを用意しました。その中身が@の3行というわけです。windowsのphpでバッチが直接実行できるか知りませんが、可能であれば、exec(test.batのフルパス)で、実行してみてはどうか?と言いました。anaconda(conda)は実効ユーザーを見て環境を決めると思うので、このバッチの実行は、そのユーザーで行う必要があります。それだけ注意してください、と指摘したつもりです。言っていることが分からない場合は、多分今はまだ諦めた方がいいと思います。
退会済みユーザー

退会済みユーザー

2020/01/22 17:48

ありがとうございます!見えてきました。 重ねて質問になってしまって申し訳ないのですが、callでactivate.batを呼び出すのは何故ですか?
dameo

2020/01/22 17:59

言っていることが分からない場合は、多分今はまだ諦めた方がいいと思います。
guest

回答1

0

基本的には、仮想環境をactivateしなくても直接仮想環境のpythonの実行ファイルを指定すればいけるはずです。activateしたときのpythonの実行ファイルの絶対パスを指定して、明示的にそれで動かすようにする、ということです。

(ただanacondaの仕組みは把握していないので、もしかするとそれだけでは動かないかもしれません。ちゃんとやるならactivate.batの中身を確認して、たとえば環境変数の設定をしていてそれが動作のために必要そうなものだったら、同じ処理をPHP側でも行ってあげる、という感じにしてください。あと、当然権限関連の設定も必要になります)

投稿2020/01/23 17:10

hayataka2049

総合スコア30933

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問