新規記事投稿 フォロー記事投稿 記事のキャンセル
From: TAD <hotani@mua.biglobe.ne.jp>
Subject: Re: Unix内部コマンドが不調!?
Date: 1999/01/12 11:31:38
Reference: mesh.program/00566

1月12日に、Kazさんは書きました。

> 中身は、Perlで書いていますが、ファイルの日付・時刻を獲得するのに
>lsコマンドを使っています。
> プロバイダは、FreeBSD+Apachなんですが、最近このようなUnixコマンド
>が、正しく実行されなくて、一覧表が全く役に立ちません。
>
> プロバイダに問い合わせても「調査中」のまま。(^^;;
> 何かこういう現象をご存じないでしょうか?

本現象についての情報は持ってません。m(_ _)m

プロバイダ側で何か設定を変えてたりしないですかねぇ。
何もしてないのに動作が変わるってのは考えにくいですよね。

> Perlだけでファイルの更新日付・時刻は取り出すことができるのなら
>とりあえずそれでもいいのですが・・・・

できるだけ、機種依存のUNIXコマンドは使用せずにperlでやった方がいいんでしょうね。

ちゃんとperlにもstat関数というのがあって、引数としてファイルハンドルかファイル名を
渡してあげると以下のような配列を返してくれます。

stat FILEHANDLE 

stat EXPR 
      Returns a 13-element array giving the status info for a file, either the file opened via
      FILEHANDLE, or named by EXPR. Returns a null list if the stat fails. Typically used as follows:

          ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
             $atime,$mtime,$ctime,$blksize,$blocks)
                 = stat($filename);

今回必要なのは、10番目の$mtimeですが、以下のような手続きでファイルの更新日付を
得られますよ。

    $mtime = (stat($filename))[9];
    ($sec, $min, $hour, $mday, $mon, $year) = localtime($mtime);
    $mdate  = sprintf("%02d%02d%02d", $year, $mon + 1, $mday);

> http://ya.sakuraweb.com/%7Ekaz/test.cgi
>
>にて、lsの結果をHTML形式ではきだすCGIも作ってみましたが、lsの結果
>をはきださず、lsコマンドでCGI自身も終わってしまっているようです。
> 「ソースを表示」にしても lsのあとにechoで出している /BODY /HTMLなどが
>出てこないのです。(;_;)
> これは、lsコマンドだけではないようで、dateコマンドなども結果が出力されて
>こないようです。

httpdのエラーログには、何か出てませんか?