【问题标题】:show image based on presence of a URL根据 URL 的存在显示图像
【发布时间】:2012-05-21 10:09:07
【问题描述】:

我想添加一张图片以防 URL 存在/处于活动状态。我自己尝试了很多方法来使它工作,但没有成功。

我想要的是:如果 url1 存在,则显示 image1,否则什么都没有,如果 url2 存在,则显示 image2,否则什么都没有,等等。

foreach ($urlsArray as $url) {
  if(@fopen($url,'r')){
    echo 'Exist';
  }
  else {
      echo 'Doesnt exist';
  }
}

对不起,我必须更具体!

$urlArray = array(
'http://www.domain.com/page1.php' => 'images/image1.jpg',
'http://www.domain.com/page2.php' => 'images/image2.jpg', 
etc);

foreach($urlsArray as $url){
    if(@fopen($url,'r')){
        echo '<img src="$image" />' /* if url1 exist show image1, etc */
    }else{
        echo '';  
    }
}

如何让它工作?

【问题讨论】:

  • “将图片添加到 url”是什么意思?
  • 您的代码现在显示为输出什么?

标签: php image url foreach fopen


【解决方案1】:

假设$url = path/to/pic/pic.gif - 意味着网址实际上会导致要显示的图片

foreach ($urlsArray as $url) {
  if(@fopen($url,'r')){
    echo '<img src="'.$url.'" />';
  }
}

已更新(为您的 foreach 使用 $key => $value):

foreach ($urlsArray as $url => $img)  {
  if(@fopen($url,'r')){
    echo '<img src="'.$img.'" />';
  }
}

【讨论】:

    【解决方案2】:

    也许这会有所帮助?:

    <?php
    
    foreach($urlsArray as $url){
        if(!empty(file_get_contents($url))){
            echo "exist";
        }else{
            echo "Doesn\'t exist";  
        }
    }
    
    ?>
    

    【讨论】:

      【解决方案3】:

      就我的知识和以往经验而言,fopen 对于外部 URL 要求将 allow_url_fopen 设置为开启。通常它会在部署环境中作为安全措施被禁用,建议使用一些替代方法,如cURL 来检查 URL 是否存在以及返回的 http 响应代码。然后根据响应码继续显示或不显示图像。

      示例代码:

      $url_exists_1 = check_url($url1);
      if ($url_exists_1) {
        // show image 1;
      }
      else {
        // don't;
      }
      function check_url($url='') {
        if (!function_exists('curl_init')) {
          die("Please enable curl");
        }
        $curl_options_array = array(
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => TRUE,
          CURLOPT_FOLLOWLOCATION => TRUE,
          CURLOPT_MAXREDIRS => 5
        );
        if ($url != '') {
          $ch = curl_init();
          curl_setopt_array($ch, $curl_options_array);
          curl_exec($ch);
          $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
          curl_close($ch);
          if ($code == 200) {
            return TRUE;
          }
          else {
            return FALSE;
          }
        } 
        else {
          return FALSE;
        }
      }
      

      【讨论】:

      • 这些函数的行为受php.ini中的设置影响。
      • @Learner 是的,allow_url_includeallow_url_fopen 在大多数情况下在 php.ini 中被禁用,因为它可以用于 Remote file inclusion。 cURL 是一个可行的替代方案。
      • 如果 URL 存在,$code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 将是 200(HTTP OK 状态代码),因此返回 TRUE,因此您知道 URL 存在。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多