- 締切済み
NET::SFTP::FOREIGN
perlモジュールのnet::sftp::foreignについてですが、$sftp->chmodと打っても、サーバ上のファイルのパーミッションを変えることができません。 $sftp->にchmodのコマンドは使えないのですか? また、パーミッションを変えるコマンドが他にある場合、それも教えて下さい。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- N60-BASIC
- ベストアンサー率80% (17/21)
> それは、例えば、$chmod = 0755;などとして変数に代入して変えることは可能ですか? 可能です。が、せめて手を動かしてから質問しましょうよ・・。 > $chmodにはフォームから受け取った$FORM{'chmod'}のデータが入ります。 ちなみに、0755でも表示上は363でした。 > 数値を直接指定しないとダメですか? (少なくともchmodの引数については)ダメです。 Perlに%FORMという特殊変数はないので、どんなライブラリでフォームの値をどのように取得しているかわかりませんが、文字列になっているのであれば数値への変換が必要です。具体的な変換方法は「Perl 8進数」でググれば山ほど出てきますので触れません。
- N60-BASIC
- ベストアンサー率80% (17/21)
> 例えば、755に変えようとすると、363になります。 いわゆる755とか644というのは8進数表記です。10進数ではありません。 Perlでの8進数は(頭に0を付けて)0755や0644と表記する必要があります。
お礼
$FORM{'chmod'}には、<input type="text" name="chmod" value="任意の数字">から送られてきた数字が代入されます。
補足
それは、例えば、$chmod = 0755;などとして変数に代入して変えることは可能ですか? $chmodにはフォームから受け取った$FORM{'chmod'}のデータが入ります。 ちなみに、0755でも表示上は363でした。 数値を直接指定しないとダメですか?
>パーミッションの変更以外はできてるんです。 引数の間違いか、変更する権限が無いかです。 エラー内容がシステムログかFTPサーバのログに出ていないかを確認してみてください。 よくあることは変更権限無いことです。 FTP先のディレクトリーや対象ファイルのパーミッションを確認してください。
補足
sftp経由なので、putでアップすると、所有者がアカウントになります。 ですから、そのアカウントでsftpに接続してやれば変えられるはずなんですけどね。 ちなみに、ftpソフトではパーミッション変えられます。 perlのnet::sftp::foreignにchmod関数がないということでしょうか。
- N60-BASIC
- ベストアンサー率80% (17/21)
マニュアルは読みましたか? https://metacpan.org/pod/Net::SFTP::Foreign マニュアルにはちゃんとchmodの記載がありますので、使えないなんてことはないはずです。 $sftp->chmod($path_or_fh, $perm) Perl組み込みのCORE::chmod()とは引数の順番が逆のようですが、間違えていませんか?
補足
引数を逆にしたら変えられました。 しかし、755とか644とか、正常なパーミッションに変更できません。 例えば、755に変えようとすると、363になります。 なにが原因ですか?
具体的な作業内容(手順)やエラー内容が不明な為、回答が違うかもしれません。 1.net::sftp::foreign はperlスクリプト内で使うモジュールですのでコマンドラインで打っても使えません。 2.スクリプトで行っている場合はスクリプトを提示されるかエラー内容を教えてください。 3.接続先がWindows OSの場合、パーミッションの変更はできません。 4.FTPログインに使っているユーザに変更権限が無い。 5.FTPサーバがSFTPに対応していない。
補足
サーバはMacのapachで、sftpサーバを使ってます。 パーミッションの変更以外はできてるんです。 ちなみにスクリプトはパールです
お礼
今月の第四土曜日が期日なので、それまでに完成すればいいのですが。
補足
一応、8進数でプログラム組んだのですが、めちゃくちゃなパーミッションになります。