![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
下記プログラムのように、あるサーバーの中のデーターをディレクトリー(/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 ディレクトリー作成成功しました。
?>
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
こんばんは。
>パーミッションの変更は可能です。
じゃぁ、
>FFFTPにてファイルの更新を行いたいのですが、
できるじゃない・・・。
>ところがプログラム上でしかパーミッションの変更も出来ません。
>それは、私にとっては意味の無いことなのです。
この意味がわからん・・・。
パーミッションが「777」とかになっていれば、編集できるのでいいのでは???
目的がわからない。
この回答への補足
>パーミッションの変更は可能です。
但しプログラムからなら。
>FFFTPにてファイルの更新を行いたいのですが、
できるじゃない・・・。
■出来ません。
>ところがプログラム上でしかパーミッションの変更も出来ません。
>それは、私にとっては意味の無いことなのです。
>この意味がわからん・・・。
>パーミッションが「777」とかになっていれば、編集できるのでいいのでは???
1000個くらいあるファイルを全て777にすることも出来ないのです。といいますか、全てのファイルのパーミッションの変更の仕方が分かりません。
それで、プログラミングを行った後に必要なファイルのみを必要に応じて手修正したいのです。
それにプログラム上から、色々なファイルをchmodで755にしたり644にしたりは難しいです。
ところがFFFTPだとその都度パーミッションの変更を行い、又元に戻せる気軽さがありますね。
FFFTPだと所有者名がApacheになっていて、FFFTPでは全く権限が無く触れません。
FFFTPで自由に加工出来るようにしたいのですが。
以上宜しくお願いします。
No.3
- 回答日時:
こんばんは。
ソースを見る限り、コピーした後のフォルダを権限変更してませんが・・・?
普通にコピーした後、そのフォルダに対して「chmod」するのが普通かと・・・。
ご回答有り難うございます。
いまこのソースリストには書き込んではおりませんが、所有者の変更を何度も試みております。
それで駄目だったので質問をさせて戴いております。
パーミッションの変更は可能です。
ところがプログラム上でしかパーミッションの変更も出来ません。
それは、私にとっては意味の無いことなのです。
あくまでも所有者名が変更したいのです。
そうでないと自由にファイルが触れません。
所有者名変更は何回も試みておりますが、プログラム上でも駄目でした。
宜しくお願いします。
No.2
- 回答日時:
>それともスーパーユーザでないからかもしれません。
お察しの通り、chownはスーパーユーザで無いと実行できないのが普通です。
>スーパーユーザにはどうしてなれるのでしょうか。
サーバー管理者しかなれません。
何をしたいかによりますが、
案1: PHPで作ったファイル・ディレクトリを chmod で otherユーザの書き込み権をつける
案2: あらかじめftpでファイル・ディレクトリを作っておき、PHPから書けるようにotherユーザの書き込み権をつけておく
有り難うございました。
案1も試みましたが、chmod で書き込み権の変更が出来ませんでした。
自分の好きな権限を与えればそれでも良かったのですが、なぜか変更が出来ませんでした。
案2は出来ません。
全て最初はブログラムを走らせ自動で幾つもコピーを繰り返すので手動でディレクトリーは津隠れません。
あきらめるしか無いみたいですね。
色々ご丁寧な回答有り難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/02 11:48
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/07/01 12:54
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CFileDialogの最初のディレクト...
-
ファイル選択ダイアログで選択...
-
バッチを用いたフォルダの自動移動
-
FTPコマンドでディレクトリごと...
-
JAVA内で複数のファイルを削除...
-
Subversionのリポジトリの削除
-
ファイル・ディレクトリ削除を...
-
CygwinでNo such file
-
現在位置より2つ上のディレク...
-
PHP ftp_fput()関数について
-
PHPにて所有者名を変更出来...
-
ディレクトリの中身を出すコマ...
-
visualstudioでc#のdllができない
-
makefile でファイルをコピーす...
-
絶対パス?絶対アドレス?意味...
-
VB.NET 最下位のディレクトリ名...
-
VC++ Win32アプリ ディレクトリ...
-
【BAT(バッチ)ファイル】Web...
-
DLL のロードの順序
-
C言語でのディレクトリ作成につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチを用いたフォルダの自動移動
-
CFileDialogの最初のディレクト...
-
FTPコマンドでディレクトリごと...
-
Subversionのリポジトリの削除
-
【BAT(バッチ)ファイル】Web...
-
現在位置より2つ上のディレク...
-
makefile でファイルをコピーす...
-
fopenでファイルが開かない場合...
-
MkDir関数
-
visualstudioでc#のdllができない
-
絶対パス?絶対アドレス?意味...
-
DLL のロードの順序
-
includeが出来ない訳とは?
-
VB.NET 最下位のディレクトリ名...
-
rmdirでフォルダが消せません
-
ファイル選択ダイアログで選択...
-
C言語でのディレクトリ作成につ...
-
aspのページが表示できません
-
バッチファイルで特定ファイル...
-
ディレクトリの正規表現について
おすすめ情報