【问题标题】:How to silence the warning of a single PHP statement?如何使单个 PHP 语句的警告静音?
【发布时间】:2012-03-04 22:48:16
【问题描述】:

我正在尝试检查某个域是否处于活动状态。我的想法是用 file_get_contents() 读取内容,并检查它是成功还是失败。

$line = file_get_contents('http://www.domain.com'); 
if ($line==false)
    echo 'Domain is dead';
else
    echo 'Domain is live';

我遇到的问题是,当它失败时,它会在网页上输出警告。通过 PHP 配置关闭所有警告不是一个选项,因为我在其他一些部分需要它们。有没有办法让这条语句不输出警告?

或者有没有更好的方法来检查域是否存在?我试过 checkdnsrr() 但速度很慢。

【问题讨论】:

  • 谢谢大家,这正是我所需要的。
  • @DanielS 不,实际上这不是您需要的。人们只是在回答你认为你需要什么,而没有看到你真正想要做什么。
  • 我不想在这里摇摆不定,但从不使用错误抑制运算符。检查thisthis
  • @Gordon,实际上这正是我所需要的。我不会复制和粘贴任何答案,但现在我知道在哪里查看 PHP 手册以及可用的功能。之后我会研究材料,得出自己的结论,并以最合适的方式应用到我的项目中。

标签: php


【解决方案1】:

使用@ 符号来禁止警告:

$line = @file_get_contents('http://www.domain.com');

你可以改用 fopen 并检查它是否为空:

 $fp = fopen('http://www.domain.com', 'r');
 if($fp) { 
    echo 'Domain is live'; 
 }

【讨论】:

  • 是的,我认为 fopen() 在这种情况下会更好地工作。谢谢!
【解决方案2】:

You can use suppression operator @.

从开发人员的角度来看,使用抑制运算符通常是一个坏主意。您应该只在最坏情况场景中使用它。

只要有可能,尽量找到一个不会产生失控错误的替代方案。

您还应该检查一下:

【讨论】:

    【解决方案3】:

    您可以使用 @ 符号来消除 PHP 错误。

    PHP: Error Control Operators

    注意 PHP 手册中的 cmets 关于使用 @ 时的性能:

    请注意,使用 @ 会很慢,因为 PHP 会产生开销 以这种方式抑制错误。这是速度和速度之间的权衡 方便。

    【讨论】:

      【解决方案4】:

      试试这个:

      $line = @file_get_contents('http://www.domain.com'); 
      

      【讨论】:

        【解决方案5】:

        【讨论】:

          【解决方案6】:

          尽可能避免使用错误抑制运算符 (@)。 如果您尝试以下代码,您的情况仍然存在问题。

          if ( fopen('http://www.google.com/', 'r')) {
               $line = file_get_contents( 'http://www.google.com/' ); 
               if ( $line==false )
                    echo 'Domain is dead';
                else
                    echo 'Domain is live';
          }
          else {
              echo 'Domain not exists';
          }
          

          如果此域不存在,那么它将再次通过警告。警告:fopen(): php_network_getaddresses: gethostbyname 失败。对于您的情况,您可以使用@。我还认为这不是检查域名是否存在的最佳方法。 我找到了一个脚本,请尝试一下。

          https://github.com/HelgeSverre/Domain-Availability

          【讨论】:

            【解决方案7】:

            您不应完全下载该页面(出于速度目的)。只需检查 HEAD 方法:

            $url = 'http://example.com/';
            $code = FALSE;
            $options['http'] = array(
                'method' => "HEAD", 
                'follow_location' => 0
            );
            $context = stream_context_create($options);
            file_get_contents($url, NULL, $context);
            if (!empty($http_response_header))
                echo 'Domain is live';
            else echo 'Domain is dead';
            

            https://hakre.wordpress.com/2011/09/17/head-first-with-php-streams/

            【讨论】:

              猜你喜欢
              • 2019-05-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-06-11
              • 1970-01-01
              • 1970-01-01
              • 2016-01-29
              • 2017-07-16
              相关资源
              最近更新 更多