
レンタルサーバで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で質問しましょう!
似たような質問が見つかりました
- UNIX・Linux JSLinuxについて。 Linuxのこの手順のプログラミングは合っているでしょうか。 ①ホームディ 2 2022/06/20 15:33
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- サーバー FTPサーバについて詳しい方(アクセス権のないディレクトリを非表示にする方法) 4 2022/08/22 22:33
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- その他(開発・運用・管理) フォルダの中にファルダを作成してファイルを格納するバッチコマンド 1 2022/06/30 11:39
- Windows 10 外部ドライブにマウントできない問題について 9 2022/03/22 18:08
- サーバー 別サーバに構築したApache+Tomcatの連携について 2 2023/03/06 23:23
- PHP ファイルアップロードに関してのセキュリティについてアドバイスお願い致します 1 2023/08/20 00:25
- UNIX・Linux Linuxについて質問です。 以下のような設定をしたMakefileを作成するにはどう記述すればよい 1 2023/02/03 20:10
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
バッチを用いたフォルダの自動移動
-
Subversionのリポジトリの削除
-
LinuxからNASを使用したときの...
-
getimagesizeを使う場合
-
Smarty includeでテンプレート...
-
CFileDialogの最初のディレクト...
-
JAVA内で複数のファイルを削除...
-
1段目、2段目…とは?
-
C言語でのディレクトリ作成につ...
-
マルチドメインの場合、上階層...
-
COLD FUSION ディレクトリの容...
-
renameでのPermission deniedエ...
-
絶対パス?絶対アドレス?意味...
-
VB.NET 最下位のディレクトリ名...
-
ディレクトリ内の拡張子指定フ...
-
includeが出来ない訳とは?
-
IIS仮想ディレクトリでのみPHP...
-
ファイルの更新日時でのソート
-
kshのスクリプトでワイルドカー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
Subversionのリポジトリの削除
-
CFileDialogの最初のディレクト...
-
バッチを用いたフォルダの自動移動
-
visualstudioでc#のdllができない
-
rmdirでフォルダが消せません
-
現在位置より2つ上のディレク...
-
makefile でファイルをコピーす...
-
JAVA内で複数のファイルを削除...
-
http://localhost/に.htaccess...
-
絶対パス?絶対アドレス?意味...
-
VB2008でFTPでのディ...
-
powershell で書いたプログラム...
-
ファイル・ディレクトリ削除を...
-
Subversionで、ファイルをリネ...
-
FTPでのファイルとディレクトリ...
-
Visual C++ 2005 Express Editi...
-
VB.NET 最下位のディレクトリ名...
-
ファイル選択ダイアログで選択...
-
DLL のロードの順序
おすすめ情報