gpt4 book ai didi

php - 如何从 PHP 保证指定的文件是 BSD/Linux 上的设备?

转载 作者:IT王子 更新时间:2023-10-29 00:06:01 25 4
gpt4 key购买 nike

在处理从 /dev/urandom 读取以生成随机字节的项目时,有人建议我检查以确保 /dev/urandom 是一个设备不仅仅是一个文件。

最直接的方法似乎是这样的:

/**
* Is the given file a device?
*
* @param string|resource $file
* @return boolean
*/
function is_device($file)
{
if (is_resource($file)) {
$stat = fstat($file);
} elseif (is_readable($file) && !is_link($file)) {
$stat = stat($file);
} else {
return false;
}
return $stat['rdev'] !== 0;
}

我的问题有两个方面:

  1. 这是检查此文件是否为设备的最佳方式吗?
  2. 是否存在此 $stat['rdev'] !== 0 检查可能失败的情况?

重要:我需要的解决方案必须在 PHP 中,而不依赖于任何 PECL 扩展或自定义 C 代码。该项目是a pure PHP 5 polyfill of PHP 7's random_bytes() and random_int() functions并且旨在通过 Composer 安装在任何其他人的 PHP 5 项目中。

最佳答案

好吧,你可以使用 filetype()。

如果你在 urandom 上做一个快速 ll,你会看到:

ll /dev/urandom 
crw-rw-rw- 1 root root 1, 9 Jul 26 17:38 /dev/urandom

beginnng 的 'c' 表示它是一个“字符”文件类型。您可以在此处查看所有不同的文件类型:

https://en.wikipedia.org/wiki/Unix_file_types

这意味着如果你运行

filetype("/dev/urandom");

你会得到“char”,意思是字 rune 件类型。 应该可以解决这个问题。

关于php - 如何从 PHP 保证指定的文件是 BSD/Linux 上的设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31631066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com