当前位置:  编程技术>php
本页文章导读:
    ▪php 将一个二维数组转换成有父子关系的数组 - jerry-Tom      <?php/** * Tree 树型类(无限分类) * * @author Kvoid * @copyright http://kvoid.com * @version 1.0 * @access public * @example * $tree= new Tree($result); * $arr=$tree->leaf(0); * $nav=$tree->navi(15); */class Tree { private $resu.........
    ▪PHP-Fcgi下PHP的执行时间设置方法 - 漫步在互联网      昨天,一个程序需要导出500条数据,结果发现到150条是,Nginx报出504 Gateway Timeout错误,原来PHP-Fcgi下的设置执行时间与isapi的不同一般情况下设置PHP脚本执行超时的时间一、在php.ini里面设置max_.........
    ▪php 分页类 - jerry-Tom      <?php/* *本程序文件对分页程序进行了封装 **/class Page_Link{ var $page_max = 10; //一组页码的最大数 var $page_num = 10; //总页数 var $length = 20; //一页的数据条数 var $isNextPage = true; var $isFirstPa.........

[1]php 将一个二维数组转换成有父子关系的数组 - jerry-Tom
    来源:    发布时间: 2013-11-07
<?php
/**
* Tree 树型类(无限分类)
*
* @author Kvoid
* @copyright http://kvoid.com
* @version 1.0
* @access public
* @example
* $tree= new Tree($result);
* $arr=$tree->leaf(0);
* $nav=$tree->navi(15);
*/
class Tree {
private $result;
private $tmp;
private $arr;
private $already = array();
/**
* 构造函数
*
* @param array $result 树型数据表结果集
* @param array $fields 树型数据表字段,array(分类id,父id)
* @param integer $root 顶级分类的父id
*/
public function __construct($result, $fields = array('id', 'pid'), $root = 0) {
$this->result = $result;
$this->fields = $fields;
$this->root = $root;
$this->handler();
}
/**
* 树型数据表结果集处理
*/
private function handler() {
foreach ($this->result as $node) {
$tmp[$node[$this->fields[1]]][] = $node;
}
krsort($tmp);
for ($i = count($tmp); $i > 0; $i--) {
foreach ($tmp as $k => $v) {
if (!in_array($k, $this->already)) {
if (!$this->tmp) {
$this->tmp = array($k, $v);
$this->already[] = $k;
continue;
} else {
foreach ($v as $key => $value) {
if ($value[$this->fields[0]] == $this->tmp[0]) {
$tmp[$k][$key]['child'] = $this->tmp[1];
$this->tmp = array($k, $tmp[$k]);
}
}
}
}
}
$this->tmp = null;
}
$this->tmp = $tmp;
}
/**
* 反向递归
*/
private function recur_n($arr, $id) {
foreach ($arr as $v) {
if ($v[$this->fields[0]] == $id) {
$this->arr[] = $v;
if ($v[$this->fields[1]] != $this->root) $this->recur_n($arr, $v[$this->fields[1]]);
}
}
}
/**
* 正向递归
*/
private function recur_p($arr) {
foreach ($arr as $v) {
$this->arr[] = $v[$this->fields[0]];
if ($v['child']) $this->recur_p($v['child']);
}
}
/**
* 菜单 多维数组
*
* @param integer $id 分类id
* @return array 返回分支,默认返回整个树
*/
public function leaf($id = null) {
$id = ($id == null) ? $this->root : $id;
return
    
[2]PHP-Fcgi下PHP的执行时间设置方法 - 漫步在互联网
    来源:    发布时间: 2013-11-07

昨天,一个程序需要导出500条数据,结果发现到150条是,Nginx报出504 Gateway Timeout错误,原来PHP-Fcgi下的设置执行时间与isapi的不同

一般情况下设置PHP脚本执行超时的时间

一、在php.ini里面设置
max_execution_time = 1800;

二、通过PHP的ini_set 函数设置
ini_set("max_execution_time", "1800");

三、通过set_time_limit 函数设置
set_time_limit(1800);

PHP-Fcgi下PHP的执行时间设置方法

昨天,一个程序需要导出500条数据,结果发现到150条是,Nginx报出504 Gateway Timeout错误

经观察,发现大约30秒时超时,php.ini中执行时间配置已经是300秒:

max_execution_time = 300

再查nginx的相关配置,无果。

写了一个php的测试页再测

echo 'aaa';
set_time_limit(0);
sleep(40);
echo 'aa';//by www.

依然超时,可以确定set_time_limit这个函数没生效。

再查php-fcgi的配置php-fpm.conf,下边这个设置疑似有问题

<VALUE name="request_terminate_timeout">30s</VALUE>

查官方文档:http://php-fpm.org/wiki/Configuration_File

request_terminate_timeout - The timeout (in seconds) for serving a single request after which the worker process will be terminated. Should be used when 'max_execution_time' ini option does not stop script execution for some reason. Default: "5s". Note: '0s' means 'off'

大意是php中set_time_limit设置的时间内如果php还没执行完,则走此处的配置,也就是request_terminate_timeout=30秒。
先把这个参数改的和php中set_time_limit值一样,都是300秒,还不行,不理解为什么,如果高手知道请赐教。

最终把request_terminate_timeout关闭,程序可以正常执行了,问题解决

<VALUE name="request_terminate_timeout">0s</VALUE>

补充:如果前端的nginx服务器使用了upstream负载均衡,那个负载均衡配置中以下几个参数也需要相应修改

proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;

本文链接:http://www.cnblogs.com/cfinder010/p/3234063.html,转载请注明。


    
[3]php 分页类 - jerry-Tom
    来源:    发布时间: 2013-11-07
<?php
/*
*本程序文件对分页程序进行了封装
*
*/

class Page_Link
{
var $page_max = 10; //一组页码的最大数

var $page_num = 10; //总页数
var $length = 20; //一页的数据条数

var $isNextPage = true;
var $isFirstPage = false;

function Calculation_Page_Num( $total )
{
$this->page_num = ceil( $total / $this->length );
return $this->page_num;
}

function Calculation_Min_Max( $act_page = 1 )
{
// 定义左右偏移量
$py_left = 0;
$py_right = 0;
// 定义左右边界
$bj_left = 0;
$bj_right = 0;
// 定义滚动区间边界
$gd_left = 0;
$gd_right = 0;
// 判断是否需要分组
if ( ( $this->page_num - $this->page_max ) <= 0 )
{
// 不需要分组
$bj_left = 1;
$bj_right = $this->page_num;
}
else
{
// 要进行分组
// 判断容量的奇偶
$tmp = $this->page_max % 2;
if ( $tmp === 1 )
{
// 奇数
$py_left = $py_right = ( $this->page_max - 1 ) / 2;
}
else
{
// 偶数
$py_left = $this->page_max / 2 - 1;
$py_right = $this->page_max / 2;
}
// 计算滚动区间
$gd_left = 1 + $py_left;
$gd_right = $this->page_num - $py_right;
// 判断当前页是否落入了滚动区间
if ( $act_page >= $gd_left && $act_page <= $gd_right )
{
// 区间内
$bj_left = $act_page - $py_left;
$bj_right = $act_page + $py_right;
}
else
{
// 区间外
if ( ( $act_page - $py_left ) <= 1 )
{
// 左侧固定区间
$bj_left = 1;
$bj_right = $this->page_max;
}
else
{
$bj_left = $this->page_num - $this->page_max + 1;
$bj_right = $this->page_num;
}
}
}

$res = array();
$res['min'] = $bj_left;
$res['max'] = $bj_right;

return $res;

}
// 主方法
function make_page( $total, $act_page, $url, $param )
{
$page_num = $this->Calculation_Page_Num( $total );
$arr_min_max = $this->Calculation_Min_Max( $act_page );

if (!eregi("([?|&]$param=)", $url)) {
$url =
    
最新技术文章:
 




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

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

浙ICP备11055608号-3