重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

レンタルサーバでmkdir関数を使ってサーバ上でディレクトリを作成しようとしています。

mkdir("$dir_name",0777);
として実行しています。
ディレクトリは作成されるのですが、パーミッションの変更がされず755で作成されてしまいます。

それから大きな問題がもうひとつ。
作成されたディレクトリをffftpで見ると所有者が
nobodyとなっており、ディレクトリの削除ができません。(削除できないのが一番の問題ですが後回しにします)

パーミッションの変更ができない点や、所有者がnobodyとなるのはサーバの仕様なんでしょうか?
これがサーバの仕様ならば、サーバ上でディレクトリを作成しパーミッションを変更するのは不可能となってしまうのでしょうか?
ご教授お願いいたします。

A 回答 (3件)

ディレクトリの削除は


rmdir(strDirectoryName) で削除できるはずですよ。
(同じnobodyユーザーで実行されますので。他の所有者のファイルの場合は無理です。)
ディレクトリ内のファイルリストを配列に取得してウェブ上から
指定のファイルを削除することも可能ですし
cronなどに組み込んで指定した時間に指定のファイルを削除する といった事も可能です。
    • good
    • 0
この回答へのお礼

ありがとうございます!
完璧にできあがりました!

ディレクトリ作成~ディレクトリ削除までの流れが出来ました。

本当に感謝、感激です。
とても大きな勉強になりました。

お礼日時:2005/11/21 01:53

パーミッションの問題ですが


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で変更は
適切な権限がないと変更できないはずですが…?(間違えていたらごめんなさい)
    • good
    • 0
この回答へのお礼

ご教授ありがとうございます。
パーミッションの件は理解したと共に問題が解決しました。

所有者がnobodyでも運用はできるんですが、そのディレクトリを削除できないのが大きな問題です。
(実際に削除できなくてどうしようと思ってます・・・)

実行ユーザは私だけなので単純にFTPでアップロードすればOKなんですが、すべてをWeb上でできないものかと思索しているところです。

とにかく一歩進むことができました。ありがとうございました。

お礼日時:2005/11/21 00:39

>ディレクトリは作成されるのですが、パーミッションの変更がされず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
    • good
    • 0
この回答へのお礼

ご教授ありがとうございます。
大変分かりやすいご説明でユーザの件はとても良く理解できました。

ところでオーナをnobodyから変更するにはどうすればよいのでしょうか?

お礼日時:2005/11/21 00:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!