- ベストアンサー
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が書き込むという動作がセキュリティ上望ましくないことは理解していますが、ここでは技術的な解決策をどなたかご教授できるでしょうか? よろしくお願いします。
- harutomo777
- お礼率68% (49/72)
- PHP
- 回答数4
- ありがとう数4
- みんなの回答 (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ファイルのみです。
お礼
確かに恐ろしいですよね。。 ご回答ありがとうございました。
関連するQ&A
- ローカルからサーバへのアップロード
PHPでWEBサイトを作っています。 ローカルにある画像をサーバにアップする機能を作りたいのです。 <form ENCTYPE="multipart/form-data"> <input type="file"/> を使って、参照したファイルを どうしたら、サーバの特定のディレクトリに保存できるのでしょうか。 (メールの添付機能と同じだと思う脳ですが、方法がわかりません)
- 締切済み
- PHP
- ローカルでは動くのにサーバーにアップするとエラーがでる
最近PHPを勉強を始めました。 とりあえず、参考書の通りに作っていくことから始めています。 アクセスカウンタを設置したく、参考書の通りに記述しました。 <?php $cnt_file = "count.dat"; $cnt_len = 10000; if (file_exists($cnt_file)) { $file = fopen($cnt_file, "r+"); $count = fgets($file, $cnt_len); $count = $count + 1; } else { $file = fopen($cnt_file, "w"); $count = 1; } rewind($file); flock($file, LOCK_EX); fputs($file, $count, $cnt_len); flock($file, LOCK_UN); fclose($file); echo $count; ?> という感じです。 ローカルでは動くのですが、サーバーにアップするとエラーがでて困っています。 ローカルではXAMPPをインストールしていてPHP5なようです。 サーバーはPHP4.4らしいですが、調べても対応している命令をだしているようなのですが、何故かエラーがでています。 問題を解決したいのですが、何分初心者で行き詰まっている状況です。 わかるかたよろしくお願いします。
- ベストアンサー
- PHP
- php テンプレート
すみません。phpで質問です。 テンプレートを用意しようと思いとりあえずサンプルを探して動かしてみたのですがうまくテンプレートのように動きません。 ちゃんとした動かし方をお教えてください。 (tempファイルの拡張子はphpがいいです。) temp.html <h2>この記事は、_+test+_です。</h2> func.php <?php function func_temp($html_file, $disp_data) { // テンプレート表示用の関数 $html_data = file_get_contents($html_file); // テンプレートファイルを読み込み $replaced = '/_+(.*)+_/'; // 検索するパターンの指定 $html_data = preg_replace($replaced, $disp_data, $html_data); // 置換実行 return $html_data; // 表示用のHTMLデータを返す } ?> access.php <?php require 'func.php'; // テンプレート機能ファイルを読み込む $data = 'PHPのテンプレートって何で作る?'; // 画面に表示させるデータを登録 echo func_temp('temp.html', $data); // テンプレート機能関数を呼ぶ ?> 参考: https://www.sejuku.net/blog/73463
- ベストアンサー
- PHP
- Local Tempファイルデータ削除
C: ユーザー :(PC名):AppData: Local: Temp フォルダ内のファイルは削除しても良いのでしょうか。 このTempファイルには、{7731F394-93E7-49D9-xxxxxx}、02011525-00000404-q61z90owfb、EPSON、****.TEMPのフォルダーと、****.cvr、*****.log、*****.TEMPのデータが入っています。 PC OS Windows8.1 素人なので、ご教授宜しくお願いします。
- ベストアンサー
- Windows 8
- PHPでのファイル操作
Phpで一覧画面を作成しています。 フォームからの情報をリストごと各行でテキストファイルに書き込ませています。 管理画面で削除、変更を行いたいんですが、特定のファイルの行数を削除できないので困っています。 $garls_list = file("./dat/garls_list.php"); $fp = fopen("./dat/garls_list.php", "w"); foreach ($garls_listt as $dat_line => $new_list) { if ($dat_line == $_POST["list"]) { // 何も書き込まない→この行を削除したと同一 } else { fwrite($fp, $new_list); } } fclose($fp); これだとファイルが真っ白になってしまいます。 詳しい方がいらっしゃいましたらご教授お願いします。 . グレード この質問に補足する.
- 締切済み
- PHP
- PHP3でローカルのファイルデータを取得したいのですが
PHP3でサーバーからローカルのファイル(ディレクトリは固定)を読み込むことはできるのでしょうか?サーバーからサーバーはいけてもサーバーからローカルというのは可能なのでしょうか?
- ベストアンサー
- CGI
- 無料ホームページの鯖でPHPでfwrite出来ない
無料ホームページのサーバに"php"というフォルダをアップし、その中に"write.php", "text.txt","read.php"というファイルを作って実行させたのですが、 "write.php"で、 $file = "text.txt"; $fp = fopen($file, "w"); if ($fp == FALSE) { print "ファイルオープン失敗<br />"; } else { fwrite($fp, $text); fclose($fp); } を実行しても"text.txt"の内容が変わらない(空のまま)のですが、何がいけないのでしょうか? "text.php"のパーミッションは666で、"php"フォルダは707です。 考えられる原因をご教授下さい、お願いします。
- 締切済み
- PHP
- Windows2000 サーバー設定できないphp
Windows2000 サーバーで phpによるファイルのアップロードが出来ません。 (failed to open stream) 自宅でWindows2000サーバーを立てました。 他PCからFTPによるファイルのアップロードは行えるのですが、 他PCからのPHPによる実行が行えません。 現在、ファイルのアップロードを行ってみたところ、 以下のエラーが発生します。 Warning: move_uploaded_file(files/dscn6906.JPG) [function.move-uploaded-file]: failed to open stream: No such file or directory in D:\Program Files\VertrigoServ\www\test\upload.php on line 10 form文、php文は正しいです。 IISマネージャーで既存のFTPサイトによる設定でフォルダ内のファイル名変更・実行等は全てチェックしています。 どうすれば、アップロード可能になるのでしょうか? 宜しくお願いします。
- ベストアンサー
- PHP
- ファイルに書き込むためのPHPを教えてください
いつもお世話になります。PHPの初心者です。 フォームの一部($text)からデータを受け取って、ファイル(log.cgi)に書き込むPHPを作りましたが、うまく作動しません。 どなたかお分かりになるかた教えてください。 //保存用ログファイル define('DE_LOGFILE', 'log.cgi'); $logtext = @file(DE_LOGFILE); //ログに書き込む $handletext = @fopen(DE_LOGFILE, "w") or _error_page(DE_LOGFILE.'に書き込めません'); fwrite($handletext, $text); @fclose($handletext);
- ベストアンサー
- PHP
- ローカルにある .php が IE で表示できない
PC を買い換えてからこうなりました。 WindwsXP HomeEdition SP2 で、IE は Ver.6 です。 自分のホームページを .php で作っていて、 .php がローカルにある状態で、IE でのページレイアウトを確認しようとします。 しかし、このファイルをどう処理するか、のようなメッセージ BOX が出てしまい、 「開く」「保存」「キャンセル」の選択となります。 そして「開く」を選択すると、Firefox が起動してそれで開いてしまうので、IE での表示確認ができません。 同じファイルでも、サーバにアップすれば IE で開いて表示する事ができます。 また、別の PC であればローカルでも IE で表示させる事ができます。 サーバにアップして表示確認すればまあいいのですが、 アップ前の仮状態なので、ローカルでチェックしながら、という作り方が出来ないのが面倒です。 どうしたらローカルの .php ファイルを IE で表示できるでしょうか。 (phpプログラムの動作確認ではありません。HTML や CSS の確認です) 他の PC では何も考えずに出来ていた事なので、対処方法がよくわからず; ・・初歩的な気はするのですが、アドバイスがあればお願いしたいです。
- 締切済み
- Windows系OS
お礼
多少、マニュアルの操作が必要ですが、簡単に導入できそうなので、試してみましたが、この関数をcallした後、すべての画面表示ができなくなってしまい、困ってしまいました。 おそらくheaderをもう一度出力し直せばよいのではいろいろやってみましたがわかりませんでした。 ただ関数自体はちゃんと動いていて、とても便利なのですが。 ご教授ありがとうございました。