[PHP-users 4234] 引数の相対パスの扱い

Osamu Shigematsu php-users@php.gr.jp
Tue, 11 Dec 2001 15:49:13 +0900


こんにちは。重松です。

PHP 4.0.6 をコマンドラインから使えるように VineLinux 2.1.5 にインストールし
ました。

sed なんかだと、同じファイルに上書きができなくて不便なので、正規表現で置換を
行うスクリプトを作成してみました。

ところが、ここでカレントディレクトリからの相対パスを渡すと、このスクリプトの
所在からの相対パスになるため、正しく動作いないことがわかりました。

どのようにすれば、スクリプトからの相対パスではなく、このスクリプトを
呼び出した時の相対パスにできるのでしょうか?

#!/usr/local/bin/php -q
<?php
if($HTTP_SERVER_VARS[argc]<4)
    die("引数が少なすぎます。\n");

for($i=3; $i<$HTTP_SERVER_VARS[argc]; ++$i){
    $file = $HTTP_SERVER_VARS[argv][$i];
    $fp = @fopen($file, 'r');
    if(!$fp)
        die("ファイルが開けません。$file\n");
    $buf = '';
    while($x = fgets($fp,1024))
        $buf .= $x;
    fclose($fp);
    
    $buf = 
mbereg_replace($HTTP_SERVER_VARS[argv][1],$HTTP_SERVER_VARS[argv][2],$buf);
    $fp = fopen($file, 'w');
    if(!$fp)
        die("ファイルが開けません。$file\n");
    fputs($fp,$buf);
    fclose($fp);
}
?>

-- 
Osamu Shigematsu

http://www.ravi.ne.jp/%7eshige/
mailto:shige@ravi.ne.jp