當從ini_get('upload_max_filesize')
和ini_get('post_max_size')
使用shorthand byte notation時,有沒有什麼辦法從函數返回的字符串中獲取字節值?例如從4M獲得4194304?我可以一起攻擊一個這樣做的函數,但如果沒有這樣做的話,我會感到驚訝。從php.ini中的簡寫字節表示法獲取字節值
回答
The paragraph you linked to結束:
你可能不使用這些符號php.ini之外,代替 使用字節的整數值。 有關如何轉換這些值的 示例,請參閱the ini_get() documentation。
這導致你這樣的事情(我稍微修改):
function return_bytes($val)
{
$val = trim($val);
$last = strtolower($val[strlen($val)-1]);
$val = substr($val, 0, -1); // necessary since PHP 7.1; otherwise optional
switch($last) {
// The 'G' modifier is available since PHP 5.1.0
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return $val;
}
使用它like so:
echo return_bytes("3M");
// Output: 3145728
有執行此沒有內置功能任務;回想一下,實際上,INI設置旨在在PHP內部使用內部。 PHP源代碼使用與上述類似的功能。
剛剛看到 - 有一些免費的代表! –
cool switch +1真的很喜歡這個概念 –
在7.1中要小心,在乘法之前你需要從修飾符中分離數值 $ val = substr($ val,0,-1); – Bouffe
嘎!剛剛發現的http://www.php.net/manual/en/function.ini-get.php
只需要RTM答案...
function return_bytes($val) {
$val = trim($val);
$last = strtolower($val[strlen($val)-1]);
switch($last) {
// The 'G' modifier is available since PHP 5.1.0
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return $val;
}
這是一種方式。
$str=ini_get('upload_max_filesize');
preg_match('/[0-9]+/', $str, $match);
echo ($match[0] * 1024 * 1024); // <--This is MB converted to bytes
如果該值不是兆字節,該怎麼辦? –
然後上面的代碼將不得不針對不同的轉換進行調整。大多數php.ini中的設置都使用MB,包括上面提到的示例。 – Tanoro
所以這個答案是不完整的。 –
我發現了很多解決方案來解決這個問題,應該有一個內置函數來解決這個問題。在任何情況下,兩件事情要突出這個問題:
- 這是非常具體的PHP的縮寫的字節值如下解釋:http://php.net/manual/en/faq.using.php#faq.using.shorthandbytes,只應在這個上下文中使用。
- 大多數現代IDE將發出警告
switch
陳述沒有break
。
這裏是一個涵蓋了一個解決方案:
/**
* Convert PHP's directive values to bytes (including the shorthand syntax).
*
* @param string $directive The PHP directive from which to get the value from.
*
* @return false|int Returns the value of the directive in bytes if available, otherwise false.
*/
function php_directive_value_to_bytes($directive) {
$value = ini_get($directive);
// Value must be a string.
if (!is_string($value)) {
return false;
}
preg_match('/^(?<value>\d+)(?<option>[K|M|G]*)$/i', $value, $matches);
$value = (int) $matches['value'];
$option = strtoupper($matches['option']);
if ($option) {
if ($option === 'K') {
$value *= 1024;
} elseif ($option === 'M') {
$value *= 1024 * 1024;
} elseif ($option === 'G') {
$value *= 1024 * 1024 * 1024;
}
}
return $value;
}
- 1. 從一個字節獲取半字節
- 2. 從幀中獲取幀值字節
- 3. 簡單的寫入和讀取字節
- 4. 從字節讀取/寫入[]
- 5. 從NSData的獲取浮點值字節
- 6. 從java中的多字節變量中獲取單個字節
- 7. 從Java字節中提取半字節
- 8. Android中圖像字節表示的字節每像素值
- 9. 如何從字節獲取位值?
- 10. 從字節數組中獲取字節塊的起始位置
- 11. 從Ruby中的一個字節獲取兩個半字節
- 12. 如何從字節數組中獲取字節並獲取數字
- 13. 從JSON獲取字節
- 14. 從Cloudinary URL獲取字節[]
- 15. 從IBUFFER獲取字節
- 16. ECDiffieHellmanCng獲取ECDiffieHellmanPublicKey從字節[]
- 17. 從字節獲取位圖[]
- 18. 從SqlDataReader獲取字節[]?
- 19. 從字節讀取字節從Db
- 20. 更簡單的方法從字符串中獲取多個字節?
- 21. VB.NET從SQL獲取字節表
- 22. 如何從字節字中獲取所選位的位置值
- 23. 從字節數組中獲取最後一個字節
- 24. 獲取字節數組字節元帥
- 25. 從字節獲取第一行字符與出字節
- 26. 獲取的Java字節緩衝區內從字節低和高次半字節
- 27. 獲取字節[]從在C++中的char *
- 28. BINARY_CHECKSUM()中的字節表示?
- 29. 從我寫的不同字節讀取
- 30. 從字符串獲取字節
如果從您發佈的鏈接閱讀,PHP的文檔告訴你怎麼做... –
也請參見http://計算器.com/q/1336581/632951 – Pacerier