• 締切済み

PHPにて所有者名を変更出来る方法を教えて下さい。

下記プログラムのように、あるサーバーの中のデーターをディレクトリー(/hogehoge)ごと別の ディレクトリー(../test)にコピーを行い、FFFTPにてファイルの更新を行いたいのですが、 コピー後は所有者名が変わってしまい属性(パーミッション)の変更が出来ず、修正や削除も出来ません。 どうも所有者名がApacheになっているようです。 勿論プログラム上からなら削除や修正は可能ですが、どうしてもFFFTPから操作出来ないと困るのです。 プログラムから所有者名を指定する方法を教えて戴きたいのです。 FFFTPで見ますと、所有者名は今までのどのファイルもディレクトリーも数字で、「1664」ですが、 PHPで作成コピーしたファイルを見ますと「48」です。 所有者名を「1664」にしたいのです。 そうすればパーミッションの変更が出来ると思います。 因みにこの方法を試しましたが変更出来ませんでした。 使い方が間違っているのでしょうか。それともスーパーユーザでないからかもしれません。 スーパーユーザにはどうしてなれるのでしょうか。 // 使用するファイル名とユーザ名 $file_name= "foo.php"; $path = "/home/sites/php.net/public_html/sandbox/" . $file_name ; $user_name = "root"; // ユーザを設定します chown($path, $user_name); 所有者名変更方法(末端の階層ディレクトリー及びファイルまで)をご教授下さいませ。 以上宜しくお願い致します。 <?php //あらかじめ指定された元フォルダ名 $imageDir = "hogehoge"; // 作りたいフォルダ構造 $structure = '../test'; // 入れ子構造を作るには、$recursive パラメータを // mkdir() に指定しなければなりません if (!mkdir($structure, 0777, true)) { die('Failed to create folders...'); } chmod($structure, 0777); $path = '../test/'; $user_name = 'myname'; // ユーザを設定します chown($path, $user_name); //あらかじめ指定されたコピー先フォルダ名 $destDir = "../test"; copyDirectory($imageDir,$destDir); function copyDirectory($imageDir, $destDir) { $handle=opendir($imageDir); while($filename=readdir($handle)) { if(strcmp($filename,".")!=0 && strcmp($filename,"..")!=0) { if(is_dir("$imageDir/$filename")) { if(!empty($filename) && !file_exists("$destDir/$filename")) mkdir("$destDir/$filename"); copyDirectory("$imageDir/$filename","$destDir/$filename"); } else { if(file_exists("$destDir/$filename")) unlink("$destDir/$filename"); copy("$imageDir/$filename","$destDir/$filename"); } } } } print ディレクトリー作成成功しました。 ?>

みんなの回答

回答No.4

こんばんは。 >パーミッションの変更は可能です。 じゃぁ、 >FFFTPにてファイルの更新を行いたいのですが、 できるじゃない・・・。 >ところがプログラム上でしかパーミッションの変更も出来ません。 >それは、私にとっては意味の無いことなのです。 この意味がわからん・・・。 パーミッションが「777」とかになっていれば、編集できるのでいいのでは??? 目的がわからない。

robotanmarch
質問者

補足

>パーミッションの変更は可能です。  但しプログラムからなら。 >FFFTPにてファイルの更新を行いたいのですが、 できるじゃない・・・。   ■出来ません。 >ところがプログラム上でしかパーミッションの変更も出来ません。 >それは、私にとっては意味の無いことなのです。 >この意味がわからん・・・。 >パーミッションが「777」とかになっていれば、編集できるのでいいのでは??? 1000個くらいあるファイルを全て777にすることも出来ないのです。といいますか、全てのファイルのパーミッションの変更の仕方が分かりません。 それで、プログラミングを行った後に必要なファイルのみを必要に応じて手修正したいのです。 それにプログラム上から、色々なファイルをchmodで755にしたり644にしたりは難しいです。 ところがFFFTPだとその都度パーミッションの変更を行い、又元に戻せる気軽さがありますね。 FFFTPだと所有者名がApacheになっていて、FFFTPでは全く権限が無く触れません。 FFFTPで自由に加工出来るようにしたいのですが。 以上宜しくお願いします。

回答No.3

こんばんは。 ソースを見る限り、コピーした後のフォルダを権限変更してませんが・・・? 普通にコピーした後、そのフォルダに対して「chmod」するのが普通かと・・・。

robotanmarch
質問者

お礼

ご回答有り難うございます。 いまこのソースリストには書き込んではおりませんが、所有者の変更を何度も試みております。 それで駄目だったので質問をさせて戴いております。 パーミッションの変更は可能です。 ところがプログラム上でしかパーミッションの変更も出来ません。 それは、私にとっては意味の無いことなのです。 あくまでも所有者名が変更したいのです。 そうでないと自由にファイルが触れません。 所有者名変更は何回も試みておりますが、プログラム上でも駄目でした。 宜しくお願いします。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

>それともスーパーユーザでないからかもしれません。 お察しの通り、chownはスーパーユーザで無いと実行できないのが普通です。 >スーパーユーザにはどうしてなれるのでしょうか。 サーバー管理者しかなれません。 何をしたいかによりますが、 案1: PHPで作ったファイル・ディレクトリを chmod で otherユーザの書き込み権をつける 案2: あらかじめftpでファイル・ディレクトリを作っておき、PHPから書けるようにotherユーザの書き込み権をつけておく

robotanmarch
質問者

お礼

有り難うございました。 案1も試みましたが、chmod で書き込み権の変更が出来ませんでした。 自分の好きな権限を与えればそれでも良かったのですが、なぜか変更が出来ませんでした。 案2は出来ません。 全て最初はブログラムを走らせ自動で幾つもコピーを繰り返すので手動でディレクトリーは津隠れません。 あきらめるしか無いみたいですね。 色々ご丁寧な回答有り難うございました。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

それを変更できる権限がないのでどうしようもありません。 そのサーバーを管理している所に相談してください。

robotanmarch
質問者

お礼

有り難うございました。

関連するQ&A