
レンタルサーバでmkdir関数を使ってサーバ上でディレクトリを作成しようとしています。
mkdir("$dir_name",0777);
として実行しています。
ディレクトリは作成されるのですが、パーミッションの変更がされず755で作成されてしまいます。
それから大きな問題がもうひとつ。
作成されたディレクトリをffftpで見ると所有者が
nobodyとなっており、ディレクトリの削除ができません。(削除できないのが一番の問題ですが後回しにします)
パーミッションの変更ができない点や、所有者がnobodyとなるのはサーバの仕様なんでしょうか?
これがサーバの仕様ならば、サーバ上でディレクトリを作成しパーミッションを変更するのは不可能となってしまうのでしょうか?
ご教授お願いいたします。
No.3ベストアンサー
- 回答日時:
ディレクトリの削除は
rmdir(strDirectoryName) で削除できるはずですよ。
(同じnobodyユーザーで実行されますので。他の所有者のファイルの場合は無理です。)
ディレクトリ内のファイルリストを配列に取得してウェブ上から
指定のファイルを削除することも可能ですし
cronなどに組み込んで指定した時間に指定のファイルを削除する といった事も可能です。
ありがとうございます!
完璧にできあがりました!
ディレクトリ作成~ディレクトリ削除までの流れが出来ました。
本当に感謝、感激です。
とても大きな勉強になりました。
No.2
- 回答日時:
パーミッションの問題ですが
unixではumaskといってパーミッションのデフォルトの設定値があります。
mkdirコマンドを実行すると引数に設定された0777からumask値0022を引かれ、
結果的に0755となるわけです。
0777 - 0022 = 0755
この問題を解決するには以下を参考にしてください。
<?
umask(0); //umask値を0に設定する スクリプトの実行が終わると元の値に戻ります
mkdir(strDirName,intPermission); //作成。
?>
所有者に関してはapacheの実行ユーザーでphpも実行されますのでしょうがないです。
(どなたか、もし方法があれば教えて頂きたいです。)
私が考えつく方法としては最初から必要なディレクトリを作っておくか
スーパーユーザー権限があればchown()してしまうか、
可能であればCGIとしてPHPを起動してsuexecを利用してPHPを実行するかです。
ディレクトリ自体はapacheの実行ユーザーで作成されますので
ファイルの読込自体は可能なはずです。(メンテナンスの時は困りますが)
haru1234さんの回答にありますFTPで変更は
適切な権限がないと変更できないはずですが…?(間違えていたらごめんなさい)
ご教授ありがとうございます。
パーミッションの件は理解したと共に問題が解決しました。
所有者がnobodyでも運用はできるんですが、そのディレクトリを削除できないのが大きな問題です。
(実際に削除できなくてどうしようと思ってます・・・)
実行ユーザは私だけなので単純にFTPでアップロードすればOKなんですが、すべてをWeb上でできないものかと思索しているところです。
とにかく一歩進むことができました。ありがとうございました。
No.1
- 回答日時:
>ディレクトリは作成されるのですが、パーミッションの変更がされず755で作成されてしまいます。
これは昔詰まった記憶があるのですが、忘れてしまいましたのでスルーさせていただきます。
#umaskが関係したような気がしないでもないです。
>パーミッションの変更ができない点や、所有者がnobodyとなるのはサーバの仕様なんでしょうか?
こちらに関してはサーバ固有の仕様というよりは、UNIXというOSの仕様です。
PHPのマニュアルのchmodの部分を一部引用しますが
注意: The current user is the user under which PHP runs. It is probably not the same user you use for normal shell or FTP access.
カレントのユーザーはPHPを実行しているユーザーです。 これは普通のシェルやFTPアクセスでのユーザーとはたいて違います。
と書いています。
PHPを「実行」しているユーザはFLYER66さんではないですよね?
PHPを実行しているユーザはWEBサービスを動作しているユーザですから、それがFLYER66さんの利用しているサーバの場合は
nobodyだということです。
>サーバ上でディレクトリを作成しパーミッションを変更するのは不可能となってしまうのでしょうか?
オーナをnobodyからFLYER66さんのユーザに変更すればFTPソフトから変更する事は可能になります。
参考URL:http://php.s3.to/man/function.chmod.html
ご教授ありがとうございます。
大変分かりやすいご説明でユーザの件はとても良く理解できました。
ところでオーナをnobodyから変更するにはどうすればよいのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
asp.netのクラスについて
-
awkの正規表現について
-
unlink「許可がありません」と...
-
Tcl/Tkの超初歩的な質問です。
-
rmdirでフォルダが消せません
-
絶対パス?絶対アドレス?意味...
-
aspのページが表示できません
-
preg_match関数で正規表現の複...
-
JAVA内で複数のファイルを削除...
-
kshのスクリプトでワイルドカー...
-
phpのftp_putについて
-
ファイル選択ダイアログで選択...
-
ASPでディレクトリを作る方法
-
phpのheader("Location:#pos")...
-
*.php、*.php3、*.phtmlの違い
-
Warning: Invalid argument sup...
-
データ送信をボタンを押さずに...
-
拡張子php画像をjpg画像等に変...
-
zip圧縮の種類について
-
PHP プルダウンからの選択 ペ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
CFileDialogの最初のディレクト...
-
Subversionのリポジトリの削除
-
バッチを用いたフォルダの自動移動
-
makefile でファイルをコピーす...
-
rmdirでフォルダが消せません
-
visualstudioでc#のdllができない
-
Visual C++ 2005 Express Editi...
-
ロケットBBSについて
-
phpのftp_putについて
-
現在位置より2つ上のディレク...
-
define でのルートディレクト...
-
ハッスルサーバーで海外からWP...
-
VB.NET 最下位のディレクトリ名...
-
絶対パス?絶対アドレス?意味...
-
レンタルサーバーでPDF出力
-
MkDir関数
-
図に示す階層構造で,現在のデ...
-
【BAT(バッチ)ファイル】Web...
-
http://localhost/に.htaccess...
おすすめ情報