• ベストアンサー

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を使って普通にサーバ上のファイルのパーミッションを変更している書き込みが見られます。 正直、混乱しているというか、よく分からない状態です。 皆様、気がついた点などありましたら、是非、アドバイスお願い致します。

  • PHP
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

「$filename」というファイルは「どこに」あるんでしょう?ftpでputしているわけですから、phpが動作しているサーバでなく別サーバ(リモート)ですよね?であれば >chmodに、「この関数では、 リモートファイルを使用することはできません。」とあります。 ということになります。普通「サーバ上のファイルのパーミッションを変更している」のは、phpスクリプトが動作するサーバと対象ファイルが同一サーバにあるため「サーバ上」とはいってもローカル扱いだからです。 基本的に   $ftp->chmod($remote_folder[$i]. $filename, 0700); でいいと思いますが、$remote_folder[$i]に移動してから$filenameだけでchmodすべきでは?

royalhost
質問者

お礼

shimixさん、早速のご回答ありがとうございます。 >ftpでputしているわけですから、 >phpが動作しているサーバでなく別サーバ(リモート)ですよね? そのとおりです。 PHPのプログラムは自分のパソコン上、対象のファイルはインターネット上のFTPサーバにあります。 >普通「サーバ上のファイルのパーミッションを変更している」のは、 >phpスクリプトが動作するサーバと対象ファイルが同一サーバにあるため >「サーバ上」とはいってもローカル扱いだからです。 そういう意味だったのですね。 勉強になりました。 >$remote_folder[$i]に移動してから$filenameだけでchmodすべきでは? はい。 shimixさんのアドバイスにそって実行し、エラーは出なくなりました。 ($ftp->cd()で該当フォルダに移動し、chmodをかける。) しかし、パーミッションはchmodで指定した値に変更されませんでした。 いったん対象ファイルを削除して実行しても同じでした。 これはいったい何が原因なのか・・・ 引き続きご指摘、ご回答お待ちしております。

その他の回答 (2)

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.3

そのFTPサーバーはchmodをサポートしていますか? まずは、PHPでなくコマンドラインで実行して確認して下さい。

royalhost
質問者

お礼

memphisさん ご回答ありがとうございます。 >そのFTPサーバーはchmodをサポートしていますか? はい、ただし、「セーフモードでのサポート」だそうです。 (このFTPサーバのホスティング業者に確認しました。) 「セーフモードにより制限を受けるか無効となる関数」 http://jp.php.net/manual/ja/features.safe-mode.functions.php このあたりがパーミッションの変更ができない理由なのかもしれません・・・ >まずは、PHPでなくコマンドラインで実行して確認して下さい。 FTPコマンドを打てる『SmartFTP』というツールがありまして、そこから「site chmod 0700 ファイル名」と打つと、正常にパーミッションが変更されます。

royalhost
質問者

補足

引き続きご回答お待ちしております。 よろしくお願いします。

  • Rebe
  • ベストアンサー率0% (0/1)
回答No.2

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

royalhost
質問者

お礼

Rebeさん、ご回答ありがとうございます。 >もしrootでSSHかTELNETでそのサーバにログインできる状況でしたら > chown apache. 該当ファイルパス >で所有者変えればOKだと思います。 PHPのプログラム上で変更できるようにしたいのです。 手動ならFTPツールで変更が出来ることを確認しています。 引き続きご回答お待ちしています。

関連するQ&A

  • chmodでパーミッションを変更する権限がないエラー・・・?

    レンタルサーバ「ロリポップ」を使用しています。 chmod命令で、ディレクトリやファイルのパーミッションを変更するプログラムを書きました。 chmodr($filename,0700); そうすると以下のようなエラーが表示されます。 Warning: chmod() [function.chmod]: Operation not permitted パーミッションを変更する権限がないために発生していると思うのですが、どうすればプログラムからパーミッションを変更することができるのでしょうか? ちなみにperlでは可能でした。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPパーミッションについて

    さくらインターネットを利用してます。 マニュアルにはPHPパーミッションは ファイルパーミッション 755 または 705(どちらでも可) ディレクトリパーミッション 755 または 705(どちらでも可) とあります。ファイルパーミッションを604でも十分に問題なく、PHPが稼動します。705よりは604の方がいいと思いますが、問題がありますか?ちなみにいろいろと実行ファイルでも604でも動きます。 PERLと違ってPHPはラフなのでしょうか?

    • 締切済み
    • PHP
  • Windows2000 サーバー設定できないphp

    Windows2000 サーバーで phpによるファイルのアップロードが出来ません。 (failed to open stream) 自宅でWindows2000サーバーを立てました。 他PCからFTPによるファイルのアップロードは行えるのですが、 他PCからのPHPによる実行が行えません。 現在、ファイルのアップロードを行ってみたところ、 以下のエラーが発生します。 Warning: move_uploaded_file(files/dscn6906.JPG) [function.move-uploaded-file]: failed to open stream: No such file or directory in D:\Program Files\VertrigoServ\www\test\upload.php on line 10 form文、php文は正しいです。 IISマネージャーで既存のFTPサイトによる設定でフォルダ内のファイル名変更・実行等は全てチェックしています。 どうすれば、アップロード可能になるのでしょうか? 宜しくお願いします。

    • ベストアンサー
    • PHP
  • chmodについて。パーミッションを、動的に変更したい。

    perlのchmod関数についてです。 パーミッションの数値を、パラメータによって動的に変更することができないでしょうか? chmod $permission,$filename; とする場合、あらかじめ $permission = $QUERY{'permission'}; #パラメータで渡す。 のように変数に代入しておくと、別の数値に変更されてしまいます。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • php ワイルドカードを使って複数のファイルのパーミッションを変えたい

    PHPのchmod関数をつかってパーミッションを変えたいのですが ファイルが膨大な為、ワイルドカードをつかって一度に 変更しようとしました。 が、 chmod("/home/public_html/hoge/hoge/*.jpg", 0755); のように記述したんですが、ワイルドカードの記述方法が 間違っているらしく、うまく作動しません。 どうすれば、膨大なファイルを一度にパーミッション変更することが 可能なのでしょうか?

    • ベストアンサー
    • PHP
  • PHPのパーミッション変更の方法

    借りているサーバーが新しく移行しまして、 セキュリティの向上のため、PHP は Apache のモジュ ールとしてではなく、自動的にCGIとして動作します。 PHPが正常に動作しない場合は、PHPのパーミッションやPHPを設置しているディレクトリのパーミッションを [755] にしてお試しください。 と言われました。 使っているのはsmartFTPです。 パーミッション変更の方法を教えてください!

    • ベストアンサー
    • PHP
  • telnetでのパーミッション変更ができない

    telnetでCGIファイルのパーミッション変更をしたいのですが、できません。たとえば xxxx% chmod 755 xxx.cgi と入れると、chmod: WARNING: can't access xxx.cgiと表示され変更ができません。まだまだunixの事もあまり解っていないので皆さんから見れば簡単な事かもしれませんが、どうかご教授ください。

  • パーミッションの変更

    RedhatES3.0サーバです。 複数のディレクトリ及びファイルのグループの変更「chgrp -R」を行おうしたら、 誤って「chmod -R」をやってしまった様で権限が変わってしまいました。 それを元に戻したいのですが、「chmod -R」で変えるとファイルもディレクトリも同じ設定になりますが、 ファイルは「644」、ディレクトリは「755」に設定したいです。 この設定をまとめて実行する方法は無いのでしょうか。

  • phpのpearが使えない

    いつも参考にさせて頂いています。 pearコマンドが使えなくなってしまいました。シェルでpearと打つと下記エラーが発生します。 【エラー内容】 Warning: require_once(PEAR.php): failed to open stream: No such file or directory in Config.php on line 27 【原因】 おそらく、PEARディレクトリを移動させてしまったからだと思います。 なので、/usr/bin/pearをviで下記のように変更した所、上記エラーが発生しました。 include_pathを/usr/share/php ⇒ /usr/local/php pearを再インストールすれば改善されるでしょうか? できれば再インストールする際の手順なども教えて頂けると嬉しいです。(参考URLでも全然OKです。 それともPEARディレクトリを移動させても問題なく動作させる方法があるでしょうか?どうか宜しくお願いします。

    • ベストアンサー
    • PHP
  • Perlでのパーミッション変更の仕方

    perlでパーミッションの変更を使おうと思っているのですが、うまくいきません。 chmod(0750,$file);ではただしく実行されるのですが、 $per = "0750"; chmod($per,$file);にすると、0356になってしまいます。 なぜ変数ではできないのでしょうか。 よろしくおねがいします。

    • ベストアンサー
    • Perl

専門家に質問してみよう