
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を使って普通にサーバ上のファイルのパーミッションを変更している書き込みが見られます。
正直、混乱しているというか、よく分からない状態です。
皆様、気がついた点などありましたら、是非、アドバイスお願い致します。
No.1ベストアンサー
- 回答日時:
「$filename」というファイルは「どこに」あるんでしょう?ftpでputしているわけですから、phpが動作しているサーバでなく別サーバ(リモート)ですよね?であれば
>chmodに、「この関数では、 リモートファイルを使用することはできません。」とあります。
ということになります。普通「サーバ上のファイルのパーミッションを変更している」のは、phpスクリプトが動作するサーバと対象ファイルが同一サーバにあるため「サーバ上」とはいってもローカル扱いだからです。
基本的に
$ftp->chmod($remote_folder[$i]. $filename, 0700);
でいいと思いますが、$remote_folder[$i]に移動してから$filenameだけでchmodすべきでは?
shimixさん、早速のご回答ありがとうございます。
>ftpでputしているわけですから、
>phpが動作しているサーバでなく別サーバ(リモート)ですよね?
そのとおりです。
PHPのプログラムは自分のパソコン上、対象のファイルはインターネット上のFTPサーバにあります。
>普通「サーバ上のファイルのパーミッションを変更している」のは、
>phpスクリプトが動作するサーバと対象ファイルが同一サーバにあるため
>「サーバ上」とはいってもローカル扱いだからです。
そういう意味だったのですね。
勉強になりました。
>$remote_folder[$i]に移動してから$filenameだけでchmodすべきでは?
はい。
shimixさんのアドバイスにそって実行し、エラーは出なくなりました。
($ftp->cd()で該当フォルダに移動し、chmodをかける。)
しかし、パーミッションはchmodで指定した値に変更されませんでした。
いったん対象ファイルを削除して実行しても同じでした。
これはいったい何が原因なのか・・・
引き続きご指摘、ご回答お待ちしております。
No.3
- 回答日時:
そのFTPサーバーはchmodをサポートしていますか?
まずは、PHPでなくコマンドラインで実行して確認して下さい。
memphisさん
ご回答ありがとうございます。
>そのFTPサーバーはchmodをサポートしていますか?
はい、ただし、「セーフモードでのサポート」だそうです。
(このFTPサーバのホスティング業者に確認しました。)
「セーフモードにより制限を受けるか無効となる関数」
http://jp.php.net/manual/ja/features.safe-mode.f …
このあたりがパーミッションの変更ができない理由なのかもしれません・・・
>まずは、PHPでなくコマンドラインで実行して確認して下さい。
FTPコマンドを打てる『SmartFTP』というツールがありまして、そこから「site chmod 0700 ファイル名」と打つと、正常にパーミッションが変更されます。
No.2
- 回答日時:
PHPでパーミッションを変更するということは、そのファイルの所有者はapacheじゃないといけないのではないでしょうか?
apacheが生成したファイルであれば変わると思いますけど、FTPでアップデータのパーミッションを変えるのであればその所有者は自分のはずですから。
もしrootでSSHかTELNETでそのサーバにログインできる状況でしたら
> chown apache. 該当ファイルパス
で所有者変えればOKだと思います。
的外れならゴメンナサイ
Rebeさん、ご回答ありがとうございます。
>もしrootでSSHかTELNETでそのサーバにログインできる状況でしたら
> chown apache. 該当ファイルパス
>で所有者変えればOKだと思います。
PHPのプログラム上で変更できるようにしたいのです。
手動ならFTPツールで変更が出来ることを確認しています。
引き続きご回答お待ちしています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Wordpressの質問です(テーマエ...
-
拡張子php画像をjpg画像等に変...
-
GD(php)での image関数 イメ...
-
php.ini を設定を変更すると再...
-
「クラウドにアップロード」」...
-
Illustratorで文字と画像を流し...
-
ランダムな文字列の含まれた画...
-
CFileDialogの最初のディレクト...
-
xamppを使う場合のphpファイル...
-
「クラス関数」「メンバ関数」...
-
mPDFでのPDF出力がうまくいかな...
-
PHPから別なPHPへ移動(?)する方法
-
そろそろお願いします
-
ラッパークラスって何ですか?
-
header(Location:~)で$_SESS...
-
空メールの作り方教えて欲しい...
-
cakephpでのダウンロード機能の...
-
文字列の一部を取り出したいの...
-
PHPのstrpbrk関数ってひらがな...
-
imageCreate関数を使用せずに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【file_exists】ファイルが存在...
-
.phpと.incファイルの違いはな...
-
phpinfoの内容が見れない
-
.phpファイルが、表示されない
-
コメントフォームの設定方法
-
URLが.PHPってどういう...
-
ユーザー認証でユーザーID毎に...
-
PHPのインストールで
-
アクセスされたくないファイル...
-
cronで動かすと保存されなくなる
-
PHPを使ったリダイレクトを教え...
-
PHPをインストールしてみた...
-
PHPの戻り値をWINDOWSバッチフ...
-
PHPファイルの中身が見られるこ...
-
PHPを使ってのサーバ上ファイル...
-
コマンドプロンプト エラー
-
PHP で各種設定ファイルをイン...
-
[PHP+XML]PHPで動的に出力す...
-
Fatal error: Class 'Config' n...
-
1つのファイルにデザイン(HTML...
おすすめ情報