2

私はそれを呼び出すスクリプトと同じ名前のファイルに保存するログメソッドを持っています.それは何をしますが、それは常に一貫しています。つまり、ファイル A は常に最初の文字がキャップされているか、2 番目の文字がキャップされています。これは任意ではありません)。

これが私のコードです...

function logData($str){
    $filePath = $_SERVER["SCRIPT_FILENAME"]; 

    $dir = substr($filePath, 0, strrpos($filePath, "/") + 1);   
    $fileName = substr($filePath,strrpos($filePath, "/")+1);
    $fileName = preg_replace('/\w+$/','log',$fileName);
    $fileName = ucfirst($fileName);  
    $fHandle = fopen( $dir.$fileName , "a");
    $contents = fwrite($fHandle, $str ."\n");
    fclose($fHandle);
}

時々、このような奇妙な動作を引き起こしている可能性があるものについて何か考えている人はいますか?

最初の文字に strtoupper を使用して力ずくで実行し、残りの文字列を追加できることはわかっていますが、ここで何が間違っているのか (もしあれば) を本当に理解したいと思います。

4

3 に答える 3

1

これはおそらく、$dir と $filename を計算するコードのさらに上のバグです。パスにスラッシュがあるかどうか...おそらく解決策は.

if (strpos('/', $filePath) === false) {
    $dir = '';    
    $fileName = $filePath;
} else {
    $dir = substr($filePath, 0, strrpos($filePath, "/") + 1);    
    $fileName = substr($filePath,strrpos($filePath, "/")+1);
}

しかし、それらの価値観をエコーアウトし、そこに集中します

于 2012-06-20T02:29:37.747 に答える
0

ucfirstのドキュメントでは、(私の強調で)次のように述べています。

strの最初の文字がアルファベットの場合、その文字が大文字の文字列を返します。

このスクリプトを実行する場所に応じて、SCRIPT_FILENAME異なる結果が返されます。別のパスからスクリプトを実行して、SCRIPT_FILENAMEに相対パスを与えることは可能でしょうか?

この理論をテストするために、可能な実行パスのいくつかから以下のスクリプトを実行し、アルファベットの最初の文字を持っているとは見なされない可能性が高いプレフィックス「./」および「/」が含まれる可能性のある例を見ました。

<?php
error_reporting(E_ALL);
echo $_SERVER["SCRIPT_FILENAME"]; 
?>
于 2012-06-20T02:43:04.387 に答える
0

最初の文字を大文字にする前に、ファイル名を強制的に小文字にすることができます。それは、最初の文字を大文字にすることだけが重要な場合です。

$fileName = ucfirst(strtolower($fileName));
于 2012-06-20T02:16:08.333 に答える