0

我的脚本在本地主机上总是运行良好。现在我把我所有的图片都移到了另一个网站上,脚本不再起作用了。为什么会这样,我该如何解决?

错误:

警告:filesize(): stat failed for http://data.localsky.net/panel/img/blocked/box_main.gifC:\xampp\htdocs\Projects\MVC\application\class.security.php15行

我用以下方法调用该函数:

baseImg('http://data.localsky.net/panel/img/blocked/box_main.gif', false);

public function baseImg($path, $auto=true) {
    $img_src = $path;
    $imgbinary = fread(fopen($img_src, "r"), filesize($img_src));
    $img_str = base64_encode($imgbinary);

    if ( preg_match('/(?i)msie [1-8]/', $_SERVER['HTTP_USER_AGENT']) ) {

        if($auto) {
            return '<img src="'.$img_scr.'" />';
        } else {
            echo  $img_src;
        }

    } else {

        if($auto) {
            return '<img src="data:image/jpg;base64,'.$img_str.'" />';
        } else {
            return 'data:image/jpg;base64,'.$img_str;
        }

    }
}
4

4 回答 4

2

您不能在 HTTP URL 上使用 filesize()。并非所有协议都提供大小数据,或支持获取它。filesize() 只能用于 LOCAL 文件。支持的协议列在函数的手册页中: http: //php.net/filesizehttp://php.net/manual/en/wrappers.http.php

于 2013-08-02T16:04:53.903 回答
2

你可以试试这个

$imgbinary = file_get_contents($img_src);
于 2013-08-02T16:05:11.363 回答
0

filesize only 可用于本地文件。如果要获取远程文件的文件大小,请使用以下代码:

<?php
$remoteFile = 'http://us.php.net/get/php-5.2.10.tar.bz2/from/this/mirror';
$ch = curl_init($remoteFile);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //not necessary unless the file redirects (like the PHP example we're using here)
$data = curl_exec($ch);
curl_close($ch);
if ($data === false) {
  echo 'cURL failed';
  exit;
}

$contentLength = 'unknown';
$status = 'unknown';
if (preg_match('/^HTTP\/1\.[01] (\d\d\d)/', $data, $matches)) {
  $status = (int)$matches[1];
}
if (preg_match('/Content-Length: (\d+)/', $data, $matches)) {
  $contentLength = (int)$matches[1];
}

echo 'HTTP Status: ' . $status . "\n";
echo 'Content-Length: ' . $contentLength;
?>

代码从http://php.net/manual/en/function.filesize.php复制而来。

于 2013-08-02T16:08:00.130 回答
0

正如 MarcB 指出的那样,您不能filesize()在远程文件上使用。这是一个基于 cURL 的解决方案,我在这里找到:

代码:

function retrieve_remote_file_size($url){
     $ch = curl_init($url);

     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
     curl_setopt($ch, CURLOPT_HEADER, TRUE);
     curl_setopt($ch, CURLOPT_NOBODY, TRUE);

     $data = curl_exec($ch);
     $size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);

     curl_close($ch);
     return $size;
}

用法:

echo retrieve_remote_file_size('http://data.localsky.net/panel/img/blocked/box_main.gif');

输出:

53

希望这可以帮助!

于 2013-08-02T16:13:06.420 回答