- ベストアンサー
サーバー内のファイル保存場所についての疑問
- サーバー内にファイルを保存する際、公開されているディレクトリ配下でないとアクセスできないエラーが発生するのでしょうか?
- 非公開のディレクトリに保存するとアクセスできないというエラーが出力されます。公開用ディレクトリ配下には保存できるのですが、非公開のディレクトリに保存する場合はどのように対策すれば良いでしょうか?
- サーバー内でテキストファイルやスクリプト中で作成されるファイルは、公開されているディレクトリ配下でなければならないのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
書き方が不味かったかな。 php.iniは safe_mode = Off doc_root = open_basedir = でかまいません。 Document_rootと前回書いたのは、 Apacheのhttpd.conf側の話です。 php側では、safe_mode = Offのみで 全ファイルへのアクセスが可能です。 あと、arisa5さんのアドバイスに対する補足で OSがWindows2000Proとなってますので、 phpの実行ユーザ(Apacheの実行ユーザ)に 対し、ファイルアクセス権を与える必要がありますが そちらは大丈夫ですか?
その他の回答 (3)
- akino4
- ベストアンサー率18% (35/185)
$filename = "C:\\Temp\\moji.dat"; 等のようにメタキャラを\でエスケープしてみては? 普段はUNIX系OSなので自信ないけど。 あと、public_html配下に置くのは見られても良いデータだけですね。普通は。 それ以外の物はpublic_html配下に置くのはタブーと言われてますね。 アビバとかTBCの二の舞になりかねないので。
補足
\\にもしてみましたが、エラーは同じでした。 現在のphp.iniでは、public_html配下にしかファイル を作成できないのが現状です。 また、現在のApacheの設定では、ディレクトリ参照も できてしまったので、どうにかpublic_html配下以外に できないかと試行錯誤しています。 senberoさんのアドバイスを基に修正してみましたが、 新たな問題に直面です。 何か思いつく事ありましたらお願いします。
パスの指定が間違っています。 > $filename = "C:\Temp\moji.dat"; '\'は"(ダブルクォーテション)内では、 エスケープ文字として扱われます。 やるなら $filename = "C:\\Temp\\moji.dat"; $filename = 'C:\Temp\moji.dat'; もしくは、 $filename = 'C:/Temp/moji.dat'; 一番下が、Unix,Windows兼用で記述出来るので お勧めです。 上記変更でも、駄目な場合は、 php.iniのsafe_modeディレクティブを確認して下さい OnになっているとDocument_root下以外へのアクセスを 制限されます。
補足
返事が遅くなりすみません。 現在の設定は、 safe_mode = On doc_root = open_basedir = C:/ です。 変更して、 safe_mode = Off doc_root = C:/public_html open_basedir = C:/files にしました。 下記のようなメッセージに変わりました。 Warning: Unknown(): open_basedir restriction in effect. File(C:/public_html/test6.php) is not within the allowed path(s): (C:/files) in Unknown on line 0 Warning: Unknown(C:/public_html/test6.php): failed to create stream: Operation not permitted in Unknown on line 0 Warning: Unknown(): Failed opening 'C:/public_html/test6.php' for inclusion (include_path='.;c:/php4/pear') in Unknown on line 0 「line 0」というのが新たな疑問です。
- arisa5
- ベストアンサー率54% (6/11)
filenameがフルパスで指定されているのでしたら、他に考えられる原因は、Tempフォルダのアクセス権だと思います。 Tempフォルダのアクセス権(パーミッション)を775または777に設定してみてください。 [コマンド:chmod 777 Temp] また、プログラム内からファイルを書き出す場合は、所有者とグループをnobodyに変更しないと書込みができません。 [コマンド:chown nobody Temp] [コマンド:chgrp nobody Temp]
補足
返事が遅くなりすみません。 環境は、 OS :Windows2000Pro SPなし Webサーバー:Apatch 2.0 PHP :PHP 4.3.2 です。 >Tempフォルダのアクセス権(パーミッション)を775または777に設定してみてください。 とありますが、Windowsなので、違う原因のようです。 何が考えられるでしょうか?
お礼
iniとconfをご指摘どおりに修正したら動作しました。 Document_rootとdoc_rootを勘違いしていました。 ディレクトリの仕組みがかなりとんちんかんしていたようです。 >phpの実行ユーザ(Apacheの実行ユーザ)に対し、ファイルアクセス権を与える必要がありますが 書籍等を参考にしていたので、特に意識していませんでしたが、設定を修正したら動作したので、手を加えませんでした。 WEB的にまだ勉強不足で色々問題が多発すると思います。 これからもご指導よろしくお願いします。 > 皆さん