ucfirst在命令行运行时大写第二个字母

时间:2012-06-20 01:51:15

标签: php ucfirst

我有一个日志方法,它保存到一个名称与调用它的脚本相同的文件,只有大写第一个字母,有时可以工作,但其他时候大写第二个字母(我看不到任何模式)至于什么时候它做什么,但它始终是一致的,这意味着文件A将始终是初始上限或第二个字母上限,它不是任意的)。

这是我的代码......

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强制它,然后追加其余的字符串,但我真的很想知道我在这里做错了什么(如果有的话)。

3 个答案:

答案 0 :(得分:1)

这可能是代码中的一个错误,您可以在其中计算$ dir和$ filename。如果路径有斜杠......可能解决方案是。

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

但是回应那些价值并在那里集中

答案 1 :(得分:0)

在大写第一个字母之前,您可以强制保留文件名。也就是说,如果您关心的只是将第一个字母大写。

$fileName = ucfirst(strtolower($fileName));

答案 2 :(得分:0)

关于ucfirst的文档,它说(我强调):

  

返回str格式化的第一个字符的字符串(如果是)   字符是字母。

根据您执行此脚本的位置SCRIPT_FILENAME将返回不同的结果。是否有可能从不同的路径执行脚本,从而为SCRIPT_FILENAME提供相对路径?

为了测试这个理论,我从一些可能的执行路径运行下面的脚本,并看到可能的示例包括前缀“./”和“/”,它们可能不会被视为具有字母第一个字符。

<?php
error_reporting(E_ALL);
echo $_SERVER["SCRIPT_FILENAME"]; 
?>