サーバー内にファイルを保存するテストプログラムを
作成しています。
C:┬public_html ←公開用
│
└Temp ←非公開
公開したディレクトリ配下にファイルを保存する事は
できるのですが、非公開のディレクトリに保存すると
アクセスできないとエラーが出力されます。
テキストファイル等スクリプト中で作成されるファイ
ルは、公開されているディレクトリ配下でないといけ
ないのでしょうか?
もし公開されいているディレクトリ配下の場合、皆さ
んはどのようにアクセスされないように対策している
のでしょうか?
-----テストプログラムです。-----
<?php
// OK
// $filename = "moji.dat";
// NG
// $filename = "C:\Temp\moji.dat";
$str = "文字列";
$fp = fopen($filename,"w");
fputs($fp, $str);
fclose($fp);
$fp = fopen($filename,"r");
$str = fgets($fp, 512);
fclose($fp);
print("$str");
?>
-----テストプログラムです。-----
No.4ベストアンサー
- 回答日時:
書き方が不味かったかな。
php.iniは
safe_mode = Off
doc_root =
open_basedir =
でかまいません。
Document_rootと前回書いたのは、
Apacheのhttpd.conf側の話です。
php側では、safe_mode = Offのみで
全ファイルへのアクセスが可能です。
あと、arisa5さんのアドバイスに対する補足で
OSがWindows2000Proとなってますので、
phpの実行ユーザ(Apacheの実行ユーザ)に
対し、ファイルアクセス権を与える必要がありますが
そちらは大丈夫ですか?
iniとconfをご指摘どおりに修正したら動作しました。
Document_rootとdoc_rootを勘違いしていました。
ディレクトリの仕組みがかなりとんちんかんしていたようです。
>phpの実行ユーザ(Apacheの実行ユーザ)に対し、ファイルアクセス権を与える必要がありますが
書籍等を参考にしていたので、特に意識していませんでしたが、設定を修正したら動作したので、手を加えませんでした。
WEB的にまだ勉強不足で色々問題が多発すると思います。
これからもご指導よろしくお願いします。 > 皆さん
No.3
- 回答日時:
$filename = "C:\\Temp\\moji.dat";
等のようにメタキャラを\でエスケープしてみては?
普段はUNIX系OSなので自信ないけど。
あと、public_html配下に置くのは見られても良いデータだけですね。普通は。
それ以外の物はpublic_html配下に置くのはタブーと言われてますね。
アビバとかTBCの二の舞になりかねないので。
この回答への補足
\\にもしてみましたが、エラーは同じでした。
現在のphp.iniでは、public_html配下にしかファイル
を作成できないのが現状です。
また、現在のApacheの設定では、ディレクトリ参照も
できてしまったので、どうにかpublic_html配下以外に
できないかと試行錯誤しています。
senberoさんのアドバイスを基に修正してみましたが、
新たな問題に直面です。
何か思いつく事ありましたらお願いします。
No.2
- 回答日時:
パスの指定が間違っています。
> $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」というのが新たな疑問です。
No.1
- 回答日時:
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なので、違う原因のようです。
何が考えられるでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- PHP ファイルアップロードに関してのセキュリティについてアドバイスお願い致します 1 2023/08/20 00:25
- Visual Basic(VBA) ブックのCOPY 4 2023/02/25 20:17
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- その他(クラウドサービス・オンラインストレージ) Google ColabでGoogleドライブのサブフォルダにファイルを生成する方法 1 2022/10/31 17:37
- UNIX・Linux Ubuntu でinvalid filenameとなるファイルをコピーする方法 3 2023/06/08 22:26
- UNIX・Linux サーバー間のデータコピー(データ形式とデーターフォーマットの変換あり。一定間隔で処理) 2 2023/08/22 22:15
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチを用いたフォルダの自動移動
-
現在位置より2つ上のディレク...
-
CFileDialogの最初のディレクト...
-
VB2008でFTPでのディ...
-
visualstudioでc#のdllができない
-
Subversionのリポジトリの削除
-
図に示す階層構造で,現在のデ...
-
/usr/local/lib/phpとはどうい...
-
rmdirでフォルダが消せません
-
FTPコマンドでディレクトリごと...
-
変数のなかみを辿る方法(Python)
-
includeが出来ない訳とは?
-
makefile でファイルをコピーす...
-
$_SERVER["HTTP_HOST"]と、$_SE...
-
fopenでファイルが開かない場合...
-
ファイル・ディレクトリ削除を...
-
上位ディレクトリ名(フォルダ...
-
SHGetSpecialFolderLocation
-
VB.NET 最下位のディレクトリ名...
-
ファイルアップロードに関して...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
バッチを用いたフォルダの自動移動
-
CFileDialogの最初のディレクト...
-
現在位置より2つ上のディレク...
-
Subversionのリポジトリの削除
-
fopenでファイルが開かない場合...
-
makefile でファイルをコピーす...
-
VB.NET 最下位のディレクトリ名...
-
rmdirでフォルダが消せません
-
visualstudioでc#のdllができない
-
ファイルアップロードに関して...
-
絶対パス?絶対アドレス?意味...
-
MkDir関数
-
拡張子を隠すのは良い事なので...
-
Subversionで、ファイルをリネ...
-
powershell で書いたプログラム...
-
コマンドプロンプトを指定のデ...
-
ファイル選択ダイアログで選択...
-
aspのページが表示できません
-
JAVA内で複数のファイルを削除...
おすすめ情報