2010年11月17日

php fgets 老是出現 Undefined offset 的錯誤訊息

最近在碰PHP程式,讓我開始懷念Perl在處理文字強大的威力,不管如何好不容易搞定fgets()的錯誤訊息,趕快紀錄下來,免得以後又吃到苦頭

我原本的程式碼如下
$fh = fopen('/proc/meminfo', 'r');
if($fh) {
$i=0;
while( !feof($fh) ) {
$buffer = fgets($fh);
list($key[$i], $value[$i]) = explode(':', $buffer);
$i++;
}
}
print_r($value);


執行之後PHP會一直出現 PHP Notice: Undefined offset: 1 錯誤訊息,問Google大神後得知可能是因為EOF的關係會多一行空白,導致陣列出現錯誤索引,我試著用preg_replace也無法將這空白拿掉,最後用strpos函式先確認每一行是否有我要的字串,才將此問題解決。程式改寫如下

$fh = fopen('/proc/meminfo', 'r');
if($fh) {
$i=0;
while( !feof($fh) ) {
$buffer = fgets($fh);
if( strpos($buffer, ':') ) {
$buffer = preg_replace( array('/\s+/', '/\n/', '/(kB)$/'), '', $buffer);
list($key[$i], $value[$i]) = explode(':', $buffer);
$i++;
}
}
fclose($fh);
}
print_r($value);

沒有留言:

張貼留言