PHPでフォームから画像をアップロードする方法

このQ&Aのポイント
  • PHPでフォームから画像をアップロードするためのプログラムを作成する際、ディレクトリの作成や所有者の変更に関する問題が発生することがあります。
  • mkdir()関数を使用してディレクトリを作成する際、親ディレクトリに書き込み権限がないとエラーが発生します。
  • chown()関数を使用して所有者を変更しようとすると、Operation not permittedというエラーが発生してしまい、所有者を変更することができません。何か解決策をご存知の方がいらっしゃいましたら、教えていただきたいです。
回答を見る
  • ベストアンサー

PHPについての質問です

PHPについての質問です PHPでフォームから画像をアップロードするプログラムを作成しています。 やりたいことは、 (1)ブラウザ上でフォームから画像をアップロード (2)アップロードした画像は、新しくディレクトリを作ってその中に格納する (3)そのディレクトリの管理者をwww-dataではなく、別のユーザに変えたい です。 この時、mkdir()でディレクトリを作成しようとすると、その親ディレクトリに書き込み権限がないとはじかれました。 あらかじめコマンドで親ディレクトリに外部からの書き込み権限を許すようにし、 先ほど作成したディレクトリの所有者がwww-dataとなっていたので、所有者を変えようとchown()をすると、 Operation not permitted in ...と出てしまい変えることができませんでした。 chown()で権限を変えようとしても、Operation not permitted ...と出てしまい変えることができません。 何かいい方法があると知っている方いらっしゃいましたら、よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数7

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

system()などの実行関数にsudoを絡ませればいけるのでは?

hayu-14
質問者

お礼

回答ありがとうございます。 system()やexec()といった関数とsudoを絡ませる方法が分かりません・・・ http://hogehack.blog80.fc2.com/blog-entry-36.html http://ml.php.gr.jp/pipermail/php-users/2002-July/008423.html PHP sudoで検索かけて上のリンクを参考にやってみたのですが、相変わらずできない状態です

その他の回答 (1)

回答No.2

こんにちは。 どのように「できない」のでしょうか? 現在のソースを載せて頂ければありがたいですが・・・。

hayu-14
質問者

お礼

こんにちは。 大変申し訳ないのですが、私が貼ったリンクの上の方を参考にしたところ、自己解決してしまいました・・・。 どうやら勘違いをしていたようで、私の方でApacheを動かしているのはwww-dataだったというのに、参考の方をそのまま持ってきてapacheユーザにsudo権限を与えていました。 yambejp様、taka451213様お騒がせしてすみませんでした。 ありがとうございました。

関連するQ&A

  • php実行権限以外でのディレクトリ(ファイル)作成方法

    webからphpを起動し、ディレクトリを作る場合、 phpが実行された権限ではない権限で作ることはできますか? 所有者がapacheとなるディレクトリを作りたいのです。 試してみたこと。 ・mkdirでディレクトリ作成後、chownで所有者変更が出来ればいいのですが、 root権限で動いているわけではないので無理でした。 ・シェルを作って、シェルの所有者をapacheにしてphpからコマンドラインで シェルを呼び出してみましたが所有者apacheで作られません。

    • ベストアンサー
    • PHP
  • 画像の削除

    PHPでアップロードした画像をunlinkという関数で削除しようとしています。 ところがエラーが表示されて削除されません Operation not permitted in・・・ と表示されます。 ちなみにアップロードの際は chmod($sendpath,0666); として権限を考慮したつもりなのですが・・ よろしくお願いします。

    • ベストアンサー
    • PHP
  • ディレクトリ・ファイルの所有権を変更する

    あるディレクトリ「sam]が ls -l で見ると drwx------ 11 507 507 4096 Apr 25 2006 sam と言う情報です。このディレクトリの所有権を rootユーザーに変更したいのですが、 chown -R root sam を実行しても、Operation not permitted と なり、操作が許可されません。 こういう場合、どのようにして所有者変更を行うのでしょうか? よろしくお願い致します。

  • PHPでchmod()を使えるようにする方法

    サーバー初心者です。ご存じの方おられましたら教えて頂けたら嬉しいです。 PHPでchmod()をすると、 Operation not permitted というエラーが表示されます。 apacheにその権限が無いと思うのですが、 こういった場合はどのように対応したらいいのでしょう。。 環境は CentOS5.3 PHP5.3 になります。 よろしくお願いします。

  • chmod  と 所有者apache

    毎度、お世話になります。 phpでプログラムを組んでいます。 プログラム上で作成したフォルダに対しては、 ブログラム上で「chmod($dir, 0707)」を実行すると パーミッションが、「707」に変更されますが、 FTP上で新規作成したフォルダに ブログラム上で「chmod($dir, 0707)」を実行しても、 「Operation not permitted 」で出て、(権限がない?) パーミッションが、「707」に変更されません。 どうすれば、変更できますか? 参考、サーバは、ロリポップですが phpで作った場合は、所有者が apache になっています。 FTP上で新規作成した場合は、所有者はブランクです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • chmod(): Operation not pe

    PHPで、hogeディレクトリを777へ変更したいのですが chmod("./hoge", 0777); とすると、下記エラーになります Warning: chmod(): Operation not permitted どうしたら良いでしょうか?

    • ベストアンサー
    • PHP
  • phpでディレクトリが作れません

    php初心者です レンタルサーバで php.iniはいじれない環境です、 ディレクトリを作ろうとすると Warning: mkdir(testdir) [function.mkdir]: File exists in /home/xxxx/public/www/php/mkdir.php on line 14 とエラーが出ます <? $chk = mkdir("mydir"); $chkr = mkdir("mydir_r", 0777); // 読み込みのみを許可 if ($chk) { echo "mydir を作成しました。 <br>\n"; } if ($chkr) { echo "mydir_r を作成しました。<br>\n"; } ?> 間違ってますでしょうか ご指導願いたいです

    • 締切済み
    • PHP
  • 所有者の変更ができない(Ubuntu)

    ハードディスクを増設しました。 所有者はrootとなっており他のユーザではアクセスできません。 そこで所有者を変更しようと思ってrootでログインしてGUIで変更しようとしたのですが、プロパティを閉じると(タブを変えたりしても)すぐ元に戻ってしまいます。 そして今度は端末から変更しようとしました。 $ su - # cd /media # chown -v linux /media/sdb1 と打ち込んだところ chown: `/media/sdb1' の所有権を変更中: Operation not permitted `/media/sdb1'の所有者をlinuxに変更できませんでした と言われたので、今度は # chmod -v 777 /media/sdb1 `/media/sdb1' のモードを 0777 (rwxrwxrwx) に変更しました という風にchmodを使って一応変更しましたと表示されましたが、ディレクトリをGUIで確認してみると何も変わっていませんでした。 端末で確認しようと /media で $ ls -al と打ち込んだところ drwxr-xr-x 2 root root 16384 1970-01-01 09:00 sdb1 と表示され、やはりrootにしか権限は適応されておらず、他のユーザは書き出しができません。 原因はなんでしょうか?

  • PHP ディレクトリ内のファイルを削除

    PHP ディレクトリ内のファイルを削除 PHPでフォームから数枚の画像をサーバへアップロードできるページを作成しました。 これをアップ日から1週経過していれば削除というような処理をしたのですがヒントをいただけますでしょうか。 ディレクトリ内にある画像のアップ日時を取得し、現在の日時から計算し、1週間経過していれば削除、という感じでしょうか。さらにこれが自動化できれば最高です。。 http://www.phppro.jp/qa/871 上記の記事からディレクトリ内のファイル削除自体は参考にできました。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 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 ディレクトリー作成成功しました。 ?>

    • 締切済み
    • PHP