プロが教える店舗&オフィスのセキュリティ対策術

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を使って普通にサーバ上のファイルのパーミッションを変更している書き込みが見られます。

正直、混乱しているというか、よく分からない状態です。


皆様、気がついた点などありましたら、是非、アドバイスお願い致します。

A 回答 (3件)

「$filename」というファイルは「どこに」あるんでしょう?ftpでputしているわけですから、phpが動作しているサーバでなく別サーバ(リモート)ですよね?であれば



>chmodに、「この関数では、 リモートファイルを使用することはできません。」とあります。

ということになります。普通「サーバ上のファイルのパーミッションを変更している」のは、phpスクリプトが動作するサーバと対象ファイルが同一サーバにあるため「サーバ上」とはいってもローカル扱いだからです。


基本的に

  $ftp->chmod($remote_folder[$i]. $filename, 0700);

でいいと思いますが、$remote_folder[$i]に移動してから$filenameだけでchmodすべきでは?
    • good
    • 0
この回答へのお礼

shimixさん、早速のご回答ありがとうございます。

>ftpでputしているわけですから、
>phpが動作しているサーバでなく別サーバ(リモート)ですよね?

そのとおりです。
PHPのプログラムは自分のパソコン上、対象のファイルはインターネット上のFTPサーバにあります。


>普通「サーバ上のファイルのパーミッションを変更している」のは、
>phpスクリプトが動作するサーバと対象ファイルが同一サーバにあるため
>「サーバ上」とはいってもローカル扱いだからです。

そういう意味だったのですね。
勉強になりました。


>$remote_folder[$i]に移動してから$filenameだけでchmodすべきでは?

はい。
shimixさんのアドバイスにそって実行し、エラーは出なくなりました。
($ftp->cd()で該当フォルダに移動し、chmodをかける。)
しかし、パーミッションはchmodで指定した値に変更されませんでした。
いったん対象ファイルを削除して実行しても同じでした。

これはいったい何が原因なのか・・・
引き続きご指摘、ご回答お待ちしております。

お礼日時:2008/03/11 10:20

そのFTPサーバーはchmodをサポートしていますか?


まずは、PHPでなくコマンドラインで実行して確認して下さい。

この回答への補足

引き続きご回答お待ちしております。

よろしくお願いします。

補足日時:2008/03/12 16:43
    • good
    • 0
この回答へのお礼

memphisさん
ご回答ありがとうございます。

>そのFTPサーバーはchmodをサポートしていますか?

はい、ただし、「セーフモードでのサポート」だそうです。
(このFTPサーバのホスティング業者に確認しました。)
「セーフモードにより制限を受けるか無効となる関数」
http://jp.php.net/manual/ja/features.safe-mode.f …

このあたりがパーミッションの変更ができない理由なのかもしれません・・・


>まずは、PHPでなくコマンドラインで実行して確認して下さい。

FTPコマンドを打てる『SmartFTP』というツールがありまして、そこから「site chmod 0700 ファイル名」と打つと、正常にパーミッションが変更されます。

お礼日時:2008/03/12 16:39

PHPでパーミッションを変更するということは、そのファイルの所有者はapacheじゃないといけないのではないでしょうか?



apacheが生成したファイルであれば変わると思いますけど、FTPでアップデータのパーミッションを変えるのであればその所有者は自分のはずですから。
もしrootでSSHかTELNETでそのサーバにログインできる状況でしたら
> chown apache. 該当ファイルパス
で所有者変えればOKだと思います。

的外れならゴメンナサイ
    • good
    • 0
この回答へのお礼

Rebeさん、ご回答ありがとうございます。

>もしrootでSSHかTELNETでそのサーバにログインできる状況でしたら
> chown apache. 該当ファイルパス
>で所有者変えればOKだと思います。

PHPのプログラム上で変更できるようにしたいのです。

手動ならFTPツールで変更が出来ることを確認しています。

引き続きご回答お待ちしています。

お礼日時:2008/03/12 16:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!