使用 file_get_contents 进行良好的错误处理[重复]

2024-02-11

我正在利用简单的htmldom http://simplehtmldom.sourceforge.net/它有这个功能:

// get html dom form file
function file_get_html() {
    $dom = new simple_html_dom;
    $args = func_get_args();
    $dom->load(call_user_func_array('file_get_contents', $args), true);
    return $dom;
}

我这样使用它:

$html3 = file_get_html(urlencode(trim("$link")));

有时,URL 可能无效,我想处理这个问题。我以为我可以使用 try 和 catch,但这并没有起作用,因为它不会抛出异常,它只是给出一个像这样的 php 警告:

[06-Aug-2010 19:59:42] PHP Warning:  file_get_contents(http://new.mysite.com/ghs 1/) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found  in /home/example/public_html/other/simple_html_dom.php on line 39

上面代码中的第39行。

我怎样才能正确处理这个错误,我可以只使用一个简单的if条件,它看起来不像返回布尔值。

感谢大家的帮助

Update

这是一个好的解决方案吗?

if(fopen(urlencode(trim("$next_url")), 'r')){

    $html3 = file_get_html(urlencode(trim("$next_url")));

}else{
    //do other stuff, error_logging
    return false;

}

这是一个想法:

function fget_contents() {
    $args = func_get_args();
    // the @ can be removed if you lower error_reporting level
    $contents = @call_user_func_array('file_get_contents', $args);

    if ($contents === false) {
        throw new Exception('Failed to open ' . $file);
    } else {
        return $contents;
    }
}

基本上是一个包装器file_get_contents。失败时它将引发异常。 为了避免必须覆盖file_get_contents本身,你可以

// change this
$dom->load(call_user_func_array('file_get_contents', $args), true); 
// to
$dom->load(call_user_func_array('fget_contents', $args), true); 

现在你可以:

try {
    $html3 = file_get_html(trim("$link")); 
} catch (Exception $e) {
    // handle error here
}

错误抑制(通过使用@或者通过降低 error_reporting 级别是valid解决方案。这可能会引发异常,您可以使用它来处理错误。原因有很多file_get_contents可能会生成警告,PHP 手册本身建议降低 error_reporting:参见手册 http://php.net/manual/en/function.file-get-contents.php

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 file_get_contents 进行良好的错误处理[重复] 的相关文章

  • 如何配置 nginx 重写规则以使 CakePHP 在 CentOS 上运行?

    大家好 请帮帮我 我正在尝试在运行 Nginx 和 Fact CGI 的 Centos 服务器上设置 cakephp 环境 我已经在服务器上运行了一个 WordPress 站点和一个 phpmyadmin 站点 因此我已经正确配置了 PHP
  • Laravel Eloquent 预加载:加入同一个表两次

    我有一个users表和一个约会桌子 在约会表中 我有两个用户 ID customer id staff id 我想检索所有带有客户姓名和员工姓名的约会 users table id name appointments table id st
  • AWS S3从本地主机批量上传php错误

    我在尝试着批次 散装从本地主机 xampp 上传到我的S3 bucket 它似乎适用于大约 6 个项目 然后我收到一条错误消息 cURL 错误说Failed sending network data from http curl haxx
  • 电子商务是否从头开始

    我需要开发一个包含电子商务部分的新网站 我来这里是想从你那里得到一些关于我应该走哪条路的提示 该网站将有一个静态部分 其中包括一些静态页面和用于销售产品的电子商务部分 我是 Django 和 PHP 开发人员 但这是我第一次需要开发电子商务
  • 是否可以在 UML 中可视化一堆函数

    我正在改进一个使用类和函数文件 只是包含各种函数的 php 文件 的内容管理系统 例如 我有一堂课叫Admin以及一个功能文件 其功能包括显示管理员概述 创建新管理员 编辑现有管理员 删除管理员 函数文件使用类并执行 mvc 概念的可视化部
  • PHP-MySQLi 连接随机失败并显示“无法分配请求的地址”

    大约两周以来 我一直在处理 LAMP 堆栈中最奇怪的问题之一 长话短说 与 MySQL 服务器的随机连接失败并显示错误消息 Warning mysqli real connect HY000 2002 Cannot assign reque
  • 禁用外部点击时关闭模式

    我正在制作一些使用模式的博客物质化 但我的模态 onclick 外部和错误数据有问题 这是我的代码 main js function changepassword var user userlog val var content conte
  • 转义用户数据,无需魔法引号

    我正在研究如何在来自外部世界的数据被用于应用程序控制 存储 逻辑等之前正确地对其进行转义 显然 随着 magic quote 指令在 php 5 3 0 中很快被弃用 并在 php6 中被删除 对于任何想要升级并进入新语言功能 同时维护遗留
  • use 语句顺序会影响 PHP 中的功能吗?

    我使用 PHP 的命名空间已经有一段时间了 我认为它对我的编程来说是一个很好的补充 今天早上我想知道一些关于use陈述 我想知道顺序是否use影响我的 PHP 代码的功能 根据 PHP net 使用别名引用外部完全限定名称或导入的能力是命名
  • 如何使用 php DOM 获取 内的值?

    我如何使用 php DOM 获取 内的值 这是我的 xml 中的一些代码
  • PHP 电子邮件验证[重复]

    这个问题在这里已经有答案了 For PHP最好的电子邮件验证方法是什么preg NOT ereg因为它是已弃用 删除 I don t需要检查该网站是否存在 这不像最高安全性 我找到了很多方法ereg但它们 显然 不是好的做法 我建议你使用F
  • Laravel 读写连接不同步

    我在 Laravel 5 2 应用程序中使用读写 MySQL 连接设置 mysql gt write gt host gt env DB HOST WRITE localhost read gt host gt env DB HOST RE
  • Memcache 不会刷新或清除内存

    我一直在尝试清除我的内存缓存 因为我注意到使用时存储占用了近 30 的服务器内存ps aux 所以我运行了以下 php 代码 memcache new Memcache memcache gt connect localhost 11211
  • 在另一个文件中扩展类的正确方法是什么?

    这就是我在 foo php 中的内容 class Foo public foo NULL public foo2 NULL public function setFoo foo foo2 this gt foo foo this gt fo
  • 为什么 asort 适用于多维数组?

    抱歉 如果这是一个非常基本的问题 我无意中发现asort http php net manual en function asort php似乎适用于多维数组 示例 PHP animals array 1 gt array name gt
  • 彩色 var_dump() 和错误

    我怎样才能将样式设置为var dump 功能和PHP错误样式 如下图所示 目前我有下一个观点var dump with pre var dump pre 没有它将全部在一行中 并且只是纯文本的错误 我搜索了一些 PHP 颜色错误 var d
  • 如何绕过Access-Control-Allow-Origin?

    我正在一个平台上对我自己的服务器进行ajax调用 他们设置了阻止这些ajax调用的平台 但我需要它从我的服务器获取数据以显示从我的服务器数据库检索到的数据 我的 ajax 脚本正在运行 它可以将数据发送到我的服务器的 php 脚本以允许其处
  • 细胞的 fpdf 对齐

    我正在尝试使用生成 PDFfpdf我有一个小问题 我需要有 2 个单元格 如下所示 Address Line 1 Version Address Line 2 1 0 City 06 05 2011 我尝试过使用MultiCell 但没有运
  • 使用 Webmin 设置 cron 作业

    我正在尝试使用 Webmin 设置一个 Cron 作业每 5 分钟运行一次 它需要定位 php 文件并运行该文件中的 php 脚本 当我在 命令 字段中输入文件路径时 它不起作用 我只是想知道我做错了什么 以及我需要 Cron 作业运行的文
  • Mysql加密/存储敏感数据,

    我的 PHP 网站有以下内容 启用 SSL 饼干 session set cookie params cookieParams lifetime cookieParams path cookieParams domain secure ht

随机推荐

  • 如何获取所有屏幕的 DPI 比例?

    我需要为连接到计算机的每个屏幕 甚至那些没有打开 WPF 窗口的屏幕 获取从 控制面板 gt 显示 设置的 DPI 比例 我见过很多获得 DPI 的方法 例如 http dzimchuk net post Best way to get D
  • 如何将eclipse库项目从github导入到android studio项目?

    我想用全息圆形进度条 https github com passsy android HoloCircularProgressBar作为我的 android studio 项目中的一个库项目 我尝试通过复制到项目中预先创建的 库 文件夹中
  • 如何在不使用 javac 编译源的情况下运行注释处理器(Java 8 无法使用 Apt)

    如何在不使用 javac 编译源的情况下运行注释处理器 Java 8 无法使用 Apt javac 是否有任何参数可以只运行注释处理而不编译所有文件 我想通过 javac 做什么 只需找到带注释的元素并使用定义的注释处理器处理它们 proc
  • 如何将pandas中的每月数据转换为季度数据

    我有每月的数据 我想将其转换为 3 个月的 周期 其中 q1 从 1 月开始 因此 在下面的示例中 前 3 个月的聚合将转换为第 2 季度的开始 所需格式 1996q2 将 3 个月度值混合在一起得到的数据值是 3 列的平均值 从概念上讲
  • 如何格式化 ruby​​ 记录器?

    如何格式化 ruby 记录器 logger Logger new nice log logger formatter proc do severity datetime progname msg NICE msg n end logger
  • C++14 中的网络库

    赫伯 萨特写道here http isocpp org blog 2013 04 trip report iso c spring 2013 meeting 在他的 ISO C 2013 年春季会议旅行报告中 计划将网络库添加到 C 14
  • 从 JSONArray 中删除 JSON 对象 - Jetison

    有没有直接的方法通过使用index html来删除存储在JSONArray中的JSONObject 我尝试了所有的可能性 仍然无法从 JSON 数组中删除 JSON 对象 任何提示都会有帮助 谢谢 在 java json 中 没有直接的方法
  • Rust 无法正确读取整数输入

    我正在尝试使用一个简单的程序来测试我的 Rust 技能 该程序从单行输入中读取多个整数 它编译正确 但不幸的是当它收到输入时1 2 3 它会出现恐慌 说输入不是有效的整数 有人可以解释一下原因 并解释一下如何修复我的程序吗 use std
  • 字符串缓冲区声明不足

    我使用工具来检查编码风格 我得到了很多建议 StringBuffer 构造函数初始化为大小 16 但附加了至少 35 个字符 这是我的一些代码 final StringBuffer Contents new StringBuffer 为什么
  • android 标签的自定义字体

    我想为我的选项卡使用自定义字体 这是我尝试过的 但我遇到了一个错误
  • 如何给Android-Studio添加版权?

    标题说明了一切 如果我想在Android Studio的代码文件中添加版权注释 当然 我在 首选项 版权 中找到了版权设置 但我无法使其工作 当我创建新的 Java 文件时 版权并没有出现 这是 Android Studio 的错误还是我错
  • 在CSS规则中使用不同字体的网页中显示两种语言的文本

    我的网页按预期使用 Yekan 字体显示波斯语文本 为什么英文文本错误地使用 Alger 以外的字体 font face font family Yekan src url Fonts BYekan ttf unicode range U
  • JavaScript 数组扩展

    只是个小疑问 我使用其原型扩展了 javascript Array 对象 如下所示
  • 如何将函数绑定到 URL 查询字符串的更改,而不是 hashchange

    正如标题所示 我希望将一个函数绑定到 URL 查询字符串的更改 一个例子 from baby to baby bc fsnf 1 brand 37 详细地说 我希望该函数在以下情况下运行from变成to Cheers 如果您的页面没有刷新
  • 如何在同一台机器上设置不同的Scala版本?

    我想关注有关 Scala 1 的书 但它使用 Scala 3 而我安装了 Scala 2 我想使用这两个版本 类似于python2 and python3 我尝试使用以下命令在本地安装 Scala3官方来源 https dotty epfl
  • jQuery 使用公共关键字选择数据属性

    我有两个具有以下设置的元素 span span span span 我使用下划线循环包含这些属性中的任何一个元素 然后执行相关操作 如果有 目前这是这样做的 each data placeholder class data placehol
  • 在python中制作一定范围内均匀分布的数字列表

    创建包含给定边界之间均匀间隔的数字 不仅仅是整数 的任意长度列表的Pythonic方法是什么 例如 my func 0 5 10 lower bound upper bound length 0 0 5 1 1 5 2 2 5 3 3 5
  • 如何在视图中启用 Rails I18n 翻译错误?

    我创建了新的 Rails 3 项目 我尝试在我的观点中使用这样的翻译 t translate test 在我的浏览器中我看起来 translate test 反而 my test translation 我设置的女巫en yml 我的主要问
  • 在jsp中调用java方法

    我有一个 java 类 它对文件执行一些操作 由于java代码很大 我不想在jsp中编写这段代码 我想在需要时调用jsp中的方法 请告诉我需要保存该文件的路径 另外一些如何使用它的示例代码也会有所帮助 在 servlet 中 在 JSP 之
  • 使用 file_get_contents 进行良好的错误处理[重复]

    这个问题在这里已经有答案了 我正在利用简单的htmldom http simplehtmldom sourceforge net 它有这个功能 get html dom form file function file get html do