- ベストアンサー
PHPを使ってのサーバ上ファイルのパーミッションの変更方法
PHPおよびPEARを使って、FTPサーバ上のファイルのパーミッションの変更をしたいと考えています。 具体的には、 PEARを利用し、$ftp->put()でアップしたファイル($filename)を、700に属性変更したいのです。 ソース上は、 chmod($filename, 0700); と書いています。 ところが、実行すると以下のようなワーニングが出ます。 「Warning: chmod() [function.chmod]: No such file or directory in ・・・」 今度は、 $ftp->chmod($remote_folder[$i]. $filename, 0700); と書いて実行してみるとエラーは出ません。 しかし、パーミッションは変わっていませんでした。 次に、 「PEARの命令を使って実行すればいいんだ!」と考えて、 $ftp->execute(chmod($filename, 0700)); と書いて実行してみました。 結果は、最初と同じ、 「Warning: chmod() [function.chmod]: No such file or directory in ・・・」 というワーニングでした。 いったい何がいけないいんでしょうか(--; phpのマニュアルを見ると、chmodに、「この関数では、 リモートファイルを使用することはできません。」とあります。 が、教えて!gooなどで検索してみると、chmodを使って普通にサーバ上のファイルのパーミッションを変更している書き込みが見られます。 正直、混乱しているというか、よく分からない状態です。 皆様、気がついた点などありましたら、是非、アドバイスお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
「$filename」というファイルは「どこに」あるんでしょう?ftpでputしているわけですから、phpが動作しているサーバでなく別サーバ(リモート)ですよね?であれば >chmodに、「この関数では、 リモートファイルを使用することはできません。」とあります。 ということになります。普通「サーバ上のファイルのパーミッションを変更している」のは、phpスクリプトが動作するサーバと対象ファイルが同一サーバにあるため「サーバ上」とはいってもローカル扱いだからです。 基本的に $ftp->chmod($remote_folder[$i]. $filename, 0700); でいいと思いますが、$remote_folder[$i]に移動してから$filenameだけでchmodすべきでは?
その他の回答 (2)
- memphis
- ベストアンサー率40% (975/2395)
そのFTPサーバーはchmodをサポートしていますか? まずは、PHPでなくコマンドラインで実行して確認して下さい。
お礼
memphisさん ご回答ありがとうございます。 >そのFTPサーバーはchmodをサポートしていますか? はい、ただし、「セーフモードでのサポート」だそうです。 (このFTPサーバのホスティング業者に確認しました。) 「セーフモードにより制限を受けるか無効となる関数」 http://jp.php.net/manual/ja/features.safe-mode.functions.php このあたりがパーミッションの変更ができない理由なのかもしれません・・・ >まずは、PHPでなくコマンドラインで実行して確認して下さい。 FTPコマンドを打てる『SmartFTP』というツールがありまして、そこから「site chmod 0700 ファイル名」と打つと、正常にパーミッションが変更されます。
補足
引き続きご回答お待ちしております。 よろしくお願いします。
- Rebe
- ベストアンサー率0% (0/1)
PHPでパーミッションを変更するということは、そのファイルの所有者はapacheじゃないといけないのではないでしょうか? apacheが生成したファイルであれば変わると思いますけど、FTPでアップデータのパーミッションを変えるのであればその所有者は自分のはずですから。 もしrootでSSHかTELNETでそのサーバにログインできる状況でしたら > chown apache. 該当ファイルパス で所有者変えればOKだと思います。 的外れならゴメンナサイ
お礼
Rebeさん、ご回答ありがとうございます。 >もしrootでSSHかTELNETでそのサーバにログインできる状況でしたら > chown apache. 該当ファイルパス >で所有者変えればOKだと思います。 PHPのプログラム上で変更できるようにしたいのです。 手動ならFTPツールで変更が出来ることを確認しています。 引き続きご回答お待ちしています。
お礼
shimixさん、早速のご回答ありがとうございます。 >ftpでputしているわけですから、 >phpが動作しているサーバでなく別サーバ(リモート)ですよね? そのとおりです。 PHPのプログラムは自分のパソコン上、対象のファイルはインターネット上のFTPサーバにあります。 >普通「サーバ上のファイルのパーミッションを変更している」のは、 >phpスクリプトが動作するサーバと対象ファイルが同一サーバにあるため >「サーバ上」とはいってもローカル扱いだからです。 そういう意味だったのですね。 勉強になりました。 >$remote_folder[$i]に移動してから$filenameだけでchmodすべきでは? はい。 shimixさんのアドバイスにそって実行し、エラーは出なくなりました。 ($ftp->cd()で該当フォルダに移動し、chmodをかける。) しかし、パーミッションはchmodで指定した値に変更されませんでした。 いったん対象ファイルを削除して実行しても同じでした。 これはいったい何が原因なのか・・・ 引き続きご指摘、ご回答お待ちしております。