我需要測試ini_get('memory_limit')
返回的值,並在內存限制低於某個閾值時增加內存限制,但是此調用返回字符串值(如'128M')而不是整數。PHP中是否有一種簡單的方法將字符串從'256M','180K','4G'轉換爲它們的整數對應值?
我知道我可以編寫一個函數來解析這些字符串(以案例和尾隨「B的考慮),我已經寫了他們無數次:
function int_from_bytestring ($byteString) {
preg_match('/^\s*([0-9.]+)\s*([KMGTPE])B?\s*$/i', $byteString, $matches);
$num = (float)$matches[1];
switch (strtoupper($matches[2])) {
case 'E':
$num = $num * 1024;
case 'P':
$num = $num * 1024;
case 'T':
$num = $num * 1024;
case 'G':
$num = $num * 1024;
case 'M':
$num = $num * 1024;
case 'K':
$num = $num * 1024;
}
return intval($num);
}
然而,這變得乏味,這似乎是一個那些已經存在於PHP中的隨機事件,儘管我從未找到它。有誰知道一些內置的方式來解析這些字節量的字符串?
與John的答案相同的問題:不處理可選的尾部B. – cletus 2009-08-26 19:03:40
是的,的確如此。我主要是提供它來說明PHP手冊如何聲明它已完成。如果你只想分析'ini_get()'的結果,那麼這將起作用,否則你必須自己修改它。海報問題的簡短答案實際上是「不,沒有內置方法」。 – zombat 2009-08-26 19:30:31
我在ini值的描述中尋找這個信息,除了'ini_get()'函數本身的文檔以外的其他地方。感謝您的發現。 – 2009-08-27 13:55:40