gpt4 book ai didi

command-line-interface - php cli include_once 错误

转载 作者:行者123 更新时间:2023-12-04 06:04:00 24 4
gpt4 key购买 nike

我正在编写一个 php cli 脚本,我的包含和要求正在生成错误。

"PHP Warning: include_once(SCRIPT FOLDER): failed to open stream: Inappropriate ioctl for device in SCIPT PATH on line XX"



我使用以下命令将工作目录设置为脚本的位置
chdir(dirname(__FILE__));

并编写了一个包装函数来包含这样的文件(只是代码片段):
$this->_path = rtrim(realpath('./'), '/').'/';     
public function require_file($file)
{
if (include_once $this->_path.$file === FALSE)
$this->fatal_error('Missing config file (config.php)');
}

我做错了什么或错过了什么?

答案 :(不能回答我自己的问题少于 100 代表)

比较 include 的返回值时正确的做法是
if ((include 'file') === FALSE)

以错误的方式执行此操作将评估为包含 '' ,导致我的错误。

最佳答案

那么,include_once是一种特殊的语言结构,而不是函数。因此,您不应该尝试使用它的返回值(例如 === FALSE)。 PHP manual entry on the topic说“如果找不到文件,include() 构造将发出警告”,因此,检查 === FALSE 对您的情况没有帮助。

我的建议是使用一个自定义的错误处理程序,当 PHP 错误出现时它会抛出异常。然后你可以包装你的include_once在 try/catch 块中处理由无效包含引起的异常,但是你喜欢。

所以,例如...

function require_file($file)
{
set_error_handler(function($errno, $errstr) { throw new Exception($errstr); });
try {
include_once $file;
restore_error_handler();
echo 'woot!';
} catch (Exception $e) {
echo 'doh!';
}
}
$file = 'invalid_filename.php';
require_file($file); // outputs: doh!

注意:我在这个例子中使用了一个闭包。如果您使用 < PHP5.3,您需要为错误处理程序使用实际函数。

关于command-line-interface - php cli include_once 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8580466/

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