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

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

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

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

解決済

XAMPPのローカルサーバーで、Windowsのエクスプローラーを開きたい

pom12345
pom12345

総合スコア12

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

2回答

1リアクション

0クリップ

311閲覧

投稿2022/09/16 09:59

編集2022/09/16 10:42

XAMPPのローカルサーバー前提ですが、

PHPを利用してWindowsのエクスプローラーを開きたいのですが、
Visual Studio Codeで実行できても、XAMPPで実行することができません。

これはweb-apiの普通でない使い方であり、
また、セキュリティ的にも良くないし、apacheで制限されてるかもとは思っていますが、
あくまでローカルPC限定で使用したいと思っています。

フレームワークを使わずシンプルなindex.phpでGETアクセスを受けれるように作ってもいいかもしれません。(検証中)

どなたかわかる方いらっしゃいましたらお願いします。

プロジェクト

・Laravelを使うまでのことではないですが、簡単にapiを実装したいため、Laravelを使用しています。XAMPPで動くなら、Laravelは使わずに、index.phpの単一のものでしようと思ってます。

・htdocs直下にopen-directory-web-apiプロジェクトを配置

php

--- api.php --- use App\Http\Controllers\OpenDirectoryController; Route::get('OpenDirectory/open', [OpenDirectoryController::class, 'open']); --- OpenDirectoryController.php --- <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class OpenDirectoryController extends Controller { public function open(Request $request) { $value = request("value"); if ($value) { // 実際には何か文字の処理をしたほうがよいかもしれません。 // escapeshelllcmdを使おうとしたらエラーした // $value2 = escapeshelllcmd("abc"); // エクスプローラーを開く、テストのためC:\を指定しています。 $command = "explorer.exe /e, /root, C:\\"; exec($command); // $filePointer = popen('start "" '.$command, 'r'); // pclose($filePointer); return response()->json([ "message" => "200 OK: " . $value ], 200); } return response()->json([ "message" => "400 Bad Request:" . $value ], 400); } }

・XAMPPでapacheを再起動 (80port使用OK)

・php artisan serveを実行

実行したことと結果

http://localhost:8000/api/OpenDirectory/open?value=abc
200 OK: のjsonがかえってきて、エクスプローラーが開かれる

http://localhost/open-directory-web-api/public/api/OpenDirectory/open?value=abc
200 OK: のjsonがかえってきて、エクスプローラーが開かない

(追記)シンプルなindex.phpで検証しましたが、開きませんでした

GETアクセス
http://localhost/open-directory/index.php?value=abc

php

<?php $value = $_GET["value"]; echo $value; // 文字は取得できています。 if ($value) { // 実際には何か文字の処理をしたほうがよいかもしれません。 // escapeshelllcmdを使おうとしたらエラーした // $value2 = escapeshelllcmd("abc"); // エクスプローラーを開く、テストのためC:\を指定しています。 $command = "explorer.exe /e, /root, C:\\"; exec($command); // $filePointer = popen('start "" '.$command, 'r'); // pclose($filePointer); echo "OK"; // ここは実行される } else { echo "NG"; } ?>
yukkuri_55👍を押しています

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

m.ts10806

2022/09/16 10:26

>エクスプローラーが開く とはどういう状態ですか?
pom12345

2022/09/16 10:35

ありがとうございます。 Windowsのエクスプローラーをexecで開くことです。 $command = "explorer.exe /e, /root, C:\\"; exec($command); VS Codeのデバッグだと開くのですが、ローカルのXAMPPのapacheで開いてくれません。セキュリティ的な問題はあるかもしれませんが。
m.ts10806

2022/09/16 10:50 編集

ブラウザから指示出してもそれはWebサーバー内でのOSコマンドによる指示になるのでブラウザを操作してるユーザには何も返ってこないのは当然です。 対象の機器内でphpコマンドなどで実行するものかと。
pom12345

2022/09/16 10:59 編集

なるほどです、phpコマンドかなにか中継するものがないか試してみます!
m.ts10806

2022/09/16 11:27

ひとまず「ブラウザからOSコマンドを指示」というのを諦めてください。 ※もちろん実際OS側に処理させた方が早い項目とか、コマンド実行(javaのjarとかpythonなど)にバックグラウンド処理を任せるというのはないわけではないですが、OSコマンドインジェクションの考慮も必要ですし、あまり積極採用するものではないかと。 今回のように「エクスプローラを開く」という指示は不適当だと思いました。
otn

2022/09/16 11:47

XAMPPはサービスとして起動していますか?デスクトップアプリとして起動していますか? サービスであれば、ログインしているデスクトップに表示するのは出来ないのかも。
pom12345

2022/09/16 13:43 編集

ご回答ありがとうございます。 XAMPPはサービスで起動してると思いますが、デスクトップアプリでの起動とはどういうことでしょうか? もちろんOSコマンドインジェクションの危険も理解しつつ、ローカルのみの使用、最低限クエリ文字の無害化はするつもりです。また、使用文字は[A-Z0-9-]{1,20}のみになりますが。 エクスプローラーを開くのは私も好きではありませんが、そういう要望があり、できないかを検証をしています。 別ファイルを中継するか、apacheのhttpd.confとかで設定できるのかも…
otn

2022/09/16 13:58 編集

> デスクトップアプリでの起動とはどういうことでしょうか? サービスで起動するように設定してなければ、ログインしてデスクトップかフォルダー内のXAMPPアイコンをクリックして起動していると思うので、そのことです。 サービスとして起動していると、そのサービスからExplorerのようなデスクトップアプリを起動しても、ログインしているデスクトップにその画面を表示できないのではないかと言うことです。 サービスとして起動するのを止めてみましょう。というのが先のコメントで書いたことです。
pom12345

2022/09/16 14:32 編集

ありがとうございます。 XAMPPをサービスとして起動していたのを停止し、デスクトップアプリとして起動すると、エクスプローラーを開くことができました。 あくまでローカルで使用するのみですが、あとはOSコマンドインジェクション対策などをすればよさそうです。 会社のメインシステムをイントラネットのWEBアプリで組んでおり、デスクトップアプリのようにエクスプローラーを開けないかの要望を頂いてまして、WEBアプリからaxiosでlocalhostに対して、GET(またはPOST)アクセスできないかを考えていました。(そこはつながるか未検証ですが、localhostに対してなので行けそうな気はします。) ありがとうございます。
pom12345

2022/09/16 14:32

ベストアンサーに記載していただけるといいですがいかがでしょうか?
m.ts10806

2022/09/16 19:10

すみません遅れました。 質問者自身も自分の質問に回答できるので、ご自身でまとめて書かれたほうが良いかと思いますが、解決されてますね。 ただ、社内システムであってもコマンド指示はWebサーバを置いてるOSで実行されるので、利用者の端末のエクスプローラが開くことはないということだけはお伝えしておきます。(それができてしまえばセキュリティ事故がブラウザでアクセスしただけで起こせるということになります)
pom12345

2022/09/16 23:17

あくまで社内システムのWebサーバーは関係なく、社内システムをブラウザで開いた時に、ブラウザのjavascriptでaxios→localhostにアクセスを考えてます。 クライアントだけの問題になりますが、まだ動くかわかってませんので、検証してみます。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。