- ベストアンサー
PHPでWindowsのローカルドライブに書き込みたい
PHP初心者ですが、PHPのファイル操作で質問があります。 サーバー上にあるファイルをWindowsのクライアントのフォルダに保存したいのですが、サーバーの作業ディレクトリに保存されてしまいます。 以下のようなテストプログラムで実験しています。(エラー処理は省略) $server_file_data=file_get_contents('server.dat'); $local_file = 'd:\\temp\\local.dat'; $cfp = fopen($local_file, "wb"); fwrite($cfp,$server_file_data); fclose($cfp); このPHPを走らせるとサーバーのカレントフォルダ上に d:\temp\local.datが作成されます。 Windows用のパスまでがファイル名に入っちゃってます。 ローカルのドライブにPHPが書き込むという動作がセキュリティ上望ましくないことは理解していますが、ここでは技術的な解決策をどなたかご教授できるでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
harutomo777 さん、こんばんは。 さて おたずねの件ですが、 「その PHP スクリプトを実行すると、ダイアログボックスが開いて、ファイルを指定してクライアント側にそれをダウンロードすることができる」 ということでいいのであれば、下記 URL を参照してみてください。では。
その他の回答 (3)
- kozaiku
- ベストアンサー率41% (256/616)
イントラネットや社内LANのようにネットワーク管理者やIT責任者がいてクライアントの環境や運用まで指示できる社内権限を持っていれば可能ですが、オープンなネットワーク環境では条件を揃えることが困難なので事実上不可能と言ってよいでしょう。 以下はあくまで「技術的な解決策」ということでイントラネットで検証済みの策です。 (1)イントラネット上にあるWebサーバ(本サーバ)とは別に、各クライアントPCでもPHPが使えるWebサーバーソフトを稼動させる(手元サーバ) (2)本サーバ上に入力欄FORMを持つpost.htmlを置く。 POST先はhttp://localhost/put.phpと記述します (3)手元サーバにはPOSTを受けてファイルを書き出すput.phpを置く これでクライアントPCから本サーバ上のpost.htmlを呼び出し[送信]すると手元サーバのput.phpに制御が移りローカルディスクに書き込むことができます。 各クライアントPCでWebサーバーソフトを稼動させた場合メモリーは占有しますが待機状態ではCPUにはほとんど負荷がかかりませんから仕事に影響は出ないはずです。 手元サーバ(クライアントPC)に「ローカルにファイルを書き出す機能」が入ってしまうとイントラネットのホームページにアクセスしただけでPCの新しいファイル(htmlだったりPHPだったり・・・)を書き込むめたりするので可能性は無限大。危険も無限大です。
お礼
ご回答ありがとうございます。 クライアントにもwebサーバーソフトを入れてPHPをローカルで走らせるという考えはすごいですね。今回の件ではご指摘のとおりセキュリティの問題でこの方法は難しいですが、勉強になりました。ありがとうございます。
- php504
- ベストアンサー率42% (926/2160)
Windows用のFTPサーバを動かしてFTPでファイルを送るとか
お礼
解答ありがとうございます。 結局は手でFTP使って持ってくるしか方法がなさそうです。
- kancil
- ベストアンサー率27% (26/95)
結論から申しますとそれは仕様上無理なのでできないです。 こんなことが可能になったら恐ろしいことがたくさんできますし。 ローカル側のデータをいじれるのはcookieファイルのみです。
お礼
確かに恐ろしいですよね。。 ご回答ありがとうございました。
お礼
多少、マニュアルの操作が必要ですが、簡単に導入できそうなので、試してみましたが、この関数をcallした後、すべての画面表示ができなくなってしまい、困ってしまいました。 おそらくheaderをもう一度出力し直せばよいのではいろいろやってみましたがわかりませんでした。 ただ関数自体はちゃんと動いていて、とても便利なのですが。 ご教授ありがとうございました。