当前位置:  编程技术>php
本页文章导读:
    ▪PHP迭代器实例 php实现斐波纳契数列函数      本节内容: PHP迭代器实例 斐波纳契数列函数 说明: 斐波纳契数列通常做法是用递归实现。 本文分享的这例代码,用PHP的迭代器来实现一个斐波纳契数列,只是把类里的next()方法重写了一.........
    ▪PHP 获取远程文件大小的3种方法      本节内容: PHP获取远程文件大小 方法1、使用file_get_contents()   代码示例: <?php $file = file_get_contents($url); echo strlen($file); ?> 方法2. 使用get_headers()   代码示例: <?php $header_array = get_hea.........
    ▪php打开远程文件的方法与风险防范      本节内容: php打开远程文件   PHP有一个配置选项叫allow_url_fopen,该选项默认是有效的。 它允许指向许多类型的资源,并像本地文件一样处理。 例如,通过读取URL你可以取得某一个页面的.........

[1]PHP迭代器实例 php实现斐波纳契数列函数
    来源: 互联网  发布时间: 2013-12-24

本节内容:
PHP迭代器实例
斐波纳契数列函数

说明:
斐波纳契数列通常做法是用递归实现。
本文分享的这例代码,用PHP的迭代器来实现一个斐波纳契数列,只是把类里的next()方法重写了一次。
 

代码示例:

<?php
/**
* PHP迭代器实例
* 斐波纳契数列函数
* by www.
*/

class Fibonacci implements Iterator {
    private $previous = 1;
    private $current = 0;
    private $key = 0;

    public function current() {
        return $this->current;
    }

    public function key() {
        return $this->key;
    }

    public function next() {
  // 关键在这里
  // 将当前值保存到  $newprevious
        $newprevious = $this->current;
  // 将上一个值与当前值的和赋给当前值
        $this->current += $this->previous;
  // 前一个当前值赋给上一个值
        $this->previous = $newprevious;
        $this->key++;
    }

    public function rewind() {
        $this->previous = 1;
        $this->current = 0;
        $this->key = 0;
    }

    public function valid() {
        return true;
    }
}
$seq = new Fibonacci;
$i = 0;
foreach ($seq as $f) {
    echo "$f ";
    if ($i++ === 15) break;
}

运行结果:
 

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610

    
[2]PHP 获取远程文件大小的3种方法
    来源: 互联网  发布时间: 2013-12-24

本节内容:
PHP获取远程文件大小

方法1、使用file_get_contents()
 

代码示例:
<?php
$file = file_get_contents($url);
echo strlen($file);
?>

方法2. 使用get_headers()
 

代码示例:
<?php
$header_array = get_headers($url, true);
$size = $header_array['Content-Length'];
echo $size;
?>

说明:
需要打开allow_url_fopen!
如未打开会显示
Warning: get_headers() [function.get-headers]: URL file-access is disabled in the server configuration

方法3.使用fsockopen()
 

代码示例:

<?php
/**
* fsockopen获取远程文件大小
*  by www.
*/
 function get_file_size($url) {
     $url = parse_url(/blog_article/$url/index.html);

     if (empty($url['host'])) {
         return false;
     }

     $url['port'] = empty($url['post']) ? 80 : $url['post'];
     $url['path'] = empty($url['path']) ? '/' : $url['path'];

     $fp = fsockopen($url['host'], $url['port'], $error);

     if($fp) {
         fputs($fp, "GET " . $url['path'] . " HTTP/1.1\r\n");
         fputs($fp, "Host:" . $url['host']. "\r\n\r\n");

         while (!feof($fp)) {
             $str = fgets($fp);
             if (trim($str) == '') {
                 break;
             }elseif(preg_match('/Content-Length:(.*)/si', $str, $arr)) {
                 return trim($arr[1]);
             }
         }
         fclose ( $fp);
         return false;
     }else {
         return false;
     }
 }
 ?>


    
[3]php打开远程文件的方法与风险防范
    来源: 互联网  发布时间: 2013-12-24

本节内容:
php打开远程文件
 
PHP有一个配置选项叫allow_url_fopen,该选项默认是有效的。
它允许指向许多类型的资源,并像本地文件一样处理。

例如,通过读取URL你可以取得某一个页面的内容(HTML)。
 

代码示例:
<?php
$contents = file_get_contents('http://www./');
?>

当被污染数据用于include和require的文件指向时,会产生严重漏洞。
实际上,这种漏洞是PHP应用中最危险的漏洞之一,这是因为它允许攻击者执行任意代码。
尽管严重性在级别上要差一点,但在一个标准文件系统函数中使用了被污染数据的话,会有类似的漏洞:
 

代码示例:
<?php
$contents = file_get_contents($_GET['filename']);
?>

该例使用户能操纵file_get_contents( )的行为,以使它获取远程资源的内容。考虑一下类似下面的请求:
http://example.org/file.php?file ... mple.org%2Fxss.html
这就导致了$content的值被污染的情形,由于这个值是通过间接方式得到的,因此很可能会忽视这个事实。这也是深度防范原则会视文件系统为远程的数据源,同时会视$content的值为输入,这样你的过滤机制会潜在的起到扭转乾坤的作用。
由于$content值是被污染的,它可能导致多种安全漏洞,包括跨站脚本漏洞和SQL注入漏洞。

例如,跨站脚本漏洞的例子:
 

代码示例:
<?php
$contents = file_get_contents($_GET['filename']);
echo $contents;
?>

解决方法:
永远不要用被污染的数据去指向一个文件名。
要坚持过滤输入,同时确信在数据指向一个文件名之前被过滤即可:
 

代码示例:
<?php
$clean = array();
/* Filter Input ($_GET['filename']) */
$contents = file_get_contents($clean['filename']);
?>

尽管无法保证$content中的数据完全没有问题,但这还是给出了一个合理的保证,即读取的文件正是你想要读取的文件,而不是由攻击者指定的。
为加强这个流程的安全性,你同样需要把$content看成是输入,并在使用前对它进行过滤。
 

代码示例:
<?php
$clean = array();
$html = array();
/* Filter Input ($_GET['filename']) */ www.
$contents = file_get_contents($clean['filename']);
/* Filter Input ($contents) */
$html['contents'] = htmlentities($clean['contents'], ENT_QUOTES, 'UTF-8');
echo $html['contents'];
?>

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3