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
1--- api.php --- 2use App\Http\Controllers\OpenDirectoryController; 3Route::get('OpenDirectory/open', [OpenDirectoryController::class, 'open']); 4 5--- OpenDirectoryController.php --- 6<?php 7namespace App\Http\Controllers; 8use Illuminate\Http\Request; 9 10class OpenDirectoryController extends Controller { 11 public function open(Request $request) { 12 $value = request("value"); 13 14 if ($value) { 15 // 実際には何か文字の処理をしたほうがよいかもしれません。 16 // escapeshelllcmdを使おうとしたらエラーした 17 // $value2 = escapeshelllcmd("abc"); 18 19 // エクスプローラーを開く、テストのためC:\を指定しています。 20 $command = "explorer.exe /e, /root, C:\\"; 21 exec($command); 22 23 // $filePointer = popen('start "" '.$command, 'r'); 24 // pclose($filePointer); 25 26 return response()->json([ 27 "message" => "200 OK: " . $value 28 ], 200); 29 } 30 31 return response()->json([ 32 "message" => "400 Bad Request:" . $value 33 ], 400); 34 } 35}
・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
1<?php 2$value = $_GET["value"]; 3echo $value; // 文字は取得できています。 4 5if ($value) { 6 // 実際には何か文字の処理をしたほうがよいかもしれません。 7 // escapeshelllcmdを使おうとしたらエラーした 8 // $value2 = escapeshelllcmd("abc"); 9 10 // エクスプローラーを開く、テストのためC:\を指定しています。 11 $command = "explorer.exe /e, /root, C:\\"; 12 exec($command); 13 14 // $filePointer = popen('start "" '.$command, 'r'); 15 // pclose($filePointer); 16 17 echo "OK"; // ここは実行される 18 19} else { 20 echo "NG"; 21} 22?>
回答2件
あなたの回答
tips
プレビュー