PHP杂项 业 ,精于勤 荒于嬉.

PHP杂项 批量修改照片文件名日期排序

发表日期:2022-08-05 23:15:29 | 来源: | 分类:PHP杂项

      示例1
<?php

$dir = "D:\个人收藏\照片备份 - 副本\\";

$md5 = [];
$i = 0;
if ($handle = opendir($dir)) {
    while (($file = readdir($handle)) !== false) {

        if (!in_array($file, ['.', '..', ['1.php']]) && !is_dir($file)) {
            if ($file === '1.php') continue;

            if (!file_exists($file)) {
                var_dump($file);
            } else {

                if (false) {//是否转小写文件名
                    rename($file, strtolower($file));
                }

                if (true) {//程序主体
                    ++$i;

                    $index = str_pad($i, 3, "0", STR_PAD_LEFT);

                    $filectime = filectime($file);
                    $filemtime = filemtime($file);
                    $time = $filemtime < $filectime ? $filemtime : $filectime;
                    $EXTENSION = pathinfo($file, PATHINFO_EXTENSION);

                    @$exif_data = exif_read_data($file);

                    if (!empty($exif_data['DateTime'])) {
                        $exif_date = $exif_data['DateTime'];
                        $fileptime = strtotime($exif_date);
                        $time = $time < $fileptime ? $time : $fileptime;
                    }
                    // DateTimeDigitized

                    if (!empty($exif_data['DateTimeOriginal'])) {
                        $exif_date = $exif_data['DateTimeOriginal'];

                        $fileptime = strtotime($exif_date);
                        if ($fileptime == false) {
                            var_dump($file . "\t" . $exif_date . "\t" . $fileptime);

                        } else {
                            $time = $time < $fileptime ? $time : $fileptime;
                        }

                    }

//                    exit();
//                $filectime = date('Y-m-d H:i:s',$filectime);
//                $filemtime = date('Y-m-d H:i:s',$filemtime);
//                $time = date('Y-m-d H:i:s',$time);
//                var_dump( "$file    创建时间:$filectime     修改时间:$filemtime    取时间:$time" );

//                img_20150816_131130.jpg
                    $newfile = "IMG_" . date('Ymd_His', $time) . "." . $EXTENSION;

                    if (file_exists($newfile)) {
                        $newfile = "IMG_" . date('Ymd_His', $time) . "_" . $index . "." . $EXTENSION;
                    }
                    rename($file, $newfile);
//                    var_dump($newfile);
                }

                if (false) {//是否去重复
                    $file_md5 = md5_file($file);
                    if (isset($md5[$file_md5])) {
                        $repeat = $md5[$file_md5];

                        var_dump("$repeat   ->  $file");

                        $repeat_filectime = filectime($repeat);
                        $repeat_filemtime = filemtime($repeat);
                        $repeat_time = $repeat_filemtime < $repeat_filectime ? $repeat_filemtime : $repeat_filectime;


                        $filectime = filectime($file);
                        $filemtime = filemtime($file);
                        $time = $filemtime < $filectime ? $filemtime : $filectime;

                        if ($time <= $repeat_time) {
                            unlink($repeat);
                            $md5[$file_md5] = $file;
                        } else {
                            unlink($file);
                        }

                    } else {
                        $md5[$file_md5] = $file;
                    }
                }

                if (false) {//是否把照片归类到每天一个文件夹(事实发现同一天拍摄的照片大多是同一类)
                    $filectime = filectime($file);
                    $filemtime = filemtime($file);
                    $time = $filemtime < $filectime ? $filemtime : $filectime;

                    $_dir = date('Y-m-d', $time);

                    @mkdir($_dir);
                    if (!file_exists($_dir . '\\' . $file)) {
                        copy($file, $_dir . '\\' . $file);
                    }
                }
            }

        }
    }
    closedir($handle);
}


?>

阅读全文 »

PHP杂项 PHP中文编程

发表日期:2021-11-19 15:44:45 | 来源: | 分类:PHP杂项

      示例1
<?php

class 文章
{
    private $列表 = [];

    public function 列表()
    {
        print_r($this->列表);
    }

    public function 添加($标题, $内容)
    {
        $this->列表[] = [
            '标题' => $标题,
            '内容' => $内容,
        ];
    }
}

$文章 = new 文章();
$文章->添加('usort-', ' 使用用户自定义的比较函数对数组中的值进行排序');
$文章->添加('assert', ' 检查一个断言是否为 false');
$文章->列表();

阅读全文 »

PHP杂项 PHP命令行工具-在Linux下写shell脚本

发表日期:2021-11-19 15:26:54 | 来源: | 分类:PHP杂项

      示例1
#!/usr/bin/php
<?php

// 像写入文件一样,将内容显示到控制台
$FILENAME = trim(input("文件名"));

$CONTENT = input("文件内容");

function input($title)
{
    fwrite(STDOUT, "请输入{$title}: ");
    $pms = fgets(STDIN);
    $wait = true;
    while ($wait) {
        if (empty(trim($pms))) {
            // 输出到错误流
            fwrite(STDERR, "{$title}输入不正确请重新输入: ");
        } else {
//            fwrite(STDOUT, "你输入的{$title}是: {$pms}");
//            $wait = false;
            break;
        }
        $pms = fgets(STDIN);  // 从控制台读取输入
    }
    return $pms;
}

$DIR = $_SERVER['PWD'];

//var_dump($FILENAME);
//var_dump($CONTENT);

file_put_contents($DIR . '/' . $FILENAME, $CONTENT);

fwrite(STDOUT, "文件已保存至: " . $DIR . '/' . $FILENAME."\n");
      示例2
#!/usr/bin/php
<?php

$DIR = $_SERVER['PWD'];

if (count($_SERVER['argv']) !== 3) {
    exit("参数错误\n");
}

$FILENAME = $_SERVER['argv'][1];

$CONTENT = $_SERVER['argv'][2];

file_put_contents($DIR . '/' . $FILENAME, $CONTENT);

阅读全文 »

PHP杂项 usort-使用用户自定义的比较函数对数组中的值进行排序

发表日期:2021-06-29 09:57:29 | 来源: | 分类:PHP杂项

      示例1
<?php 
function cmp($a, $b){
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
foreach ($a as $key => $value) {
    echo "$key: $value\n";
}
?>
      示例2
<?php 
function cmp($a, $b){
    return strcmp($a["fruit"], $b["fruit"]);
}
$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";
usort($fruits, "cmp");
while (list($key, $value) = each($fruits)) {
    echo "$fruits[$key]: " . $value["fruit"] . "\n";
}
?>
      示例3
<?php 
class TestObj {
    var $name;
    function TestObj($name)    {
        $this->name = $name;
    }
    /* This is the static comparing function: */
    static function cmp_obj($a, $b)    {
        $al = strtolower($a->name);
        $bl = strtolower($b->name);
        if ($al == $bl) {
            return 0;
        }
        return ($al > $bl) ? +1 : -1;
    }
}
$a[] = new TestObj("c");
$a[] = new TestObj("b");
$a[] = new TestObj("d");
usort($a, array("TestObj", "cmp_obj"));
foreach ($a as $item) {
    echo $item->name . "\n";
}
?>
      示例4
<?php 
$array[0] = array('key_a' => 'z', 'key_b' => 'c');
$array[1] = array('key_a' => 'x', 'key_b' => 'b');
$array[2] = array('key_a' => 'y', 'key_b' => 'a');
function build_sorter($key) {
    return function ($a, $b) use ($key) {
        return strnatcmp($a[$key], $b[$key]);
    }
;
}
usort($array, build_sorter('key_b'));
foreach ($array as $item) {
    echo $item['key_a'] . ', ' . $item['key_b'] . "\n";
}
?>

阅读全文 »

PHP杂项 PHP 使用 curl 提交 json 格式数据

发表日期:2021-06-28 14:01:20 | 来源: | 分类:PHP杂项

      示例1
function curl_post_json($url, $data = array())
    {

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

        curl_setopt($ch, CURLOPT_POST, 1);

        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));

        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                'Content-Type: application/json; charset=utf-8'
            )
        );

        $output = curl_exec($ch);

        curl_close($ch);

        return $output;

    }

阅读全文 »

PHP杂项 tp+nginx

发表日期:2021-03-11 14:40:33 | 来源: | 分类:PHP杂项

server

    {   


        listen 80;


        #listen [::]:80;


        server_name xxxx.com.cn ;


        index index.html index.htm index.php default.html default.htm default.php;


        root  /home/wwwroot/xxx;


        


        #include rewrite/thinkphp.conf;


        location / {


            if (!-e $request_filename) {


                rewrite ^(.*)$ /index.php?s=/$1 last;


                break;


            }


        }


        #error_page   404   /404.html;


        


        # Deny access to PHP files in specific directory


        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }


        


        #include enable-php-pathinfo.conf;

        location ~ [^/]\.php(/|$)

        {


            fastcgi_pass  unix:/tmp/php-cgi.sock;


            fastcgi_index index.php;


            include fastcgi.tp.conf;


            #include pathinfo.conf;

            fastcgi_split_path_info ^(.+?\.php)(/.*)$;

            set $path_info $fastcgi_path_info;

            fastcgi_param PATH_INFO       $path_info;

            try_files $fastcgi_script_name =404;


        }


        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$


        {   


            expires      30d;


        }



        location ~ .*\.(js|css)?$


        {   


            expires      12h;


        }


        location ~ /.well-known {


            allow all;


        }


        location ~ /\.


        {   


            deny all;


        }



        access_log  /home/wwwlogs/xxx.log;


}


阅读全文 »

PHP杂项 nginx配置

发表日期:2021-03-11 14:22:24 | 来源: | 分类:PHP杂项

nginx:

server

    {

        listen 80 default_server reuseport;

        #listen [::]:80 default_server ipv6only=on;

        server_name _;

        index index.html index.htm index.php;

        root  /home/wwwroot/default;


        #error_page   404   /404.html;


        # Deny access to PHP files in specific directory

        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }


        include enable-php.conf;

        include rewrite/thinkphp.conf;


        location /nginx_status

        {

            stub_status on;

            access_log   off;

        }


        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

        {

            expires      30d;

        }


        location ~ .*\.(js|css)?$

        {

            expires      12h;

        }


        location ~ /.well-known {

            allow all;

        }


        location ~ /\.

        {

            deny all;

        }


        access_log  /home/wwwlogs/access.log;

    }


vhost:

server

    {   

        listen 80;

        #listen [::]:80;

        server_name xxxx.com.cn ;

        index index.html index.htm index.php default.html default.htm default.php;

        root  /home/wwwroot/xxx;

        

        include rewrite/thinkphp.conf;

        #error_page   404   /404.html;

        

        # Deny access to PHP files in specific directory

        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

        

        include enable-php-pathinfo.conf;

        

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

        {   

            expires      30d;

        }

        

        location ~ .*\.(js|css)?$

        {   

            expires      12h;

        }

        

        location ~ /.well-known {

            allow all;

        }

        

        location ~ /\.

        {   

            deny all;

        }

        

        access_log  /home/wwwlogs/xxx.log;

    }


thinkphp:

location / {

    if (!-e $request_filename) {

        rewrite ^(.*)$ /index.php?s=/$1 last;

        break;

    }

}


pathinfo.conf

fastcgi_split_path_info ^(.+?\.php)(/.*)$;

set $path_info $fastcgi_path_info;

fastcgi_param PATH_INFO       $path_info;

try_files $fastcgi_script_name =404;


enable-php-pathinfo.conf

        location ~ [^/]\.php(/|$)

        {

            fastcgi_pass  unix:/tmp/php-cgi.sock;

            fastcgi_index index.php;

            include fastcgi.tp.conf;

            include pathinfo.conf;

        }


enable-php.conf


        location ~ [^/]\.php(/|$)

        {

            try_files $uri =404;

            fastcgi_pass  unix:/tmp/php-cgi.sock;

            fastcgi_index index.php;

            include fastcgi.conf;

        }


fastcgi.conf

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

fastcgi_param  QUERY_STRING       $query_string;

fastcgi_param  REQUEST_METHOD     $request_method;

fastcgi_param  CONTENT_TYPE       $content_type;

fastcgi_param  CONTENT_LENGTH     $content_length;


fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;

fastcgi_param  REQUEST_URI        $request_uri;

fastcgi_param  DOCUMENT_URI       $document_uri;

fastcgi_param  DOCUMENT_ROOT      $document_root;

fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REQUEST_SCHEME     $scheme;

fastcgi_param  HTTPS              $https if_not_empty;


fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;


fastcgi_param  REMOTE_ADDR        $remote_addr;

fastcgi_param  REMOTE_PORT        $remote_port;

fastcgi_param  SERVER_ADDR        $server_addr;

fastcgi_param  SERVER_PORT        $server_port;

fastcgi_param  SERVER_NAME        $server_name;


# PHP only, required if PHP was built with --enable-force-cgi-redirect

fastcgi_param  REDIRECT_STATUS    200;

fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/:/sys/";



fastcgi.tp.conf

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

fastcgi_param  QUERY_STRING       $query_string;

fastcgi_param  REQUEST_METHOD     $request_method;

fastcgi_param  CONTENT_TYPE       $content_type;

fastcgi_param  CONTENT_LENGTH     $content_length;


fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;

fastcgi_param  REQUEST_URI        $request_uri;

fastcgi_param  DOCUMENT_URI       $document_uri;

fastcgi_param  DOCUMENT_ROOT      $document_root;

fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REQUEST_SCHEME     $scheme;

fastcgi_param  HTTPS              $https if_not_empty;


fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;


fastcgi_param  REMOTE_ADDR        $remote_addr;

fastcgi_param  REMOTE_PORT        $remote_port;

fastcgi_param  SERVER_ADDR        $server_addr;

fastcgi_param  SERVER_PORT        $server_port;

fastcgi_param  SERVER_NAME        $server_name;


# PHP only, required if PHP was built with --enable-force-cgi-redirect

fastcgi_param  REDIRECT_STATUS    200;

fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/../:/tmp/:/proc/:/sys/";


fastcgi_params


fastcgi_param  QUERY_STRING       $query_string;

fastcgi_param  REQUEST_METHOD     $request_method;

fastcgi_param  CONTENT_TYPE       $content_type;

fastcgi_param  CONTENT_LENGTH     $content_length;


fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;

fastcgi_param  REQUEST_URI        $request_uri;

fastcgi_param  DOCUMENT_URI       $document_uri;

fastcgi_param  DOCUMENT_ROOT      $document_root;

fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REQUEST_SCHEME     $scheme;

fastcgi_param  HTTPS              $https if_not_empty;


fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;


fastcgi_param  REMOTE_ADDR        $remote_addr;

fastcgi_param  REMOTE_PORT        $remote_port;

fastcgi_param  SERVER_ADDR        $server_addr;

fastcgi_param  SERVER_PORT        $server_port;

fastcgi_param  SERVER_NAME        $server_name;


# PHP only, required if PHP was built with --enable-force-cgi-redirect

fastcgi_param  REDIRECT_STATUS    200;




阅读全文 »

PHP杂项 PHP测试mysql数据库MYSQLI和PDO的性能比较

发表日期:2019-01-07 17:35:07 | 来源: | 分类:PHP杂项

测试服务器 远程腾讯云服务器 memory.canquick.com


server-id=8

master-host=test.canquick.com

master-port=3306

master-user=root

master-password=我的MySQL密码

replicate-do-db=canquick

master-retry-count = 999

master-connect-retry = 60



binlog_checksum = none

/var/log/mysql-demo.log


change master to master_host='123.206.17.224',master_user='root',master_password='我的MySQL密码',master_log_file='mysql-bin.000001',master_log_pos=120;



SLAVE STOP; 

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=0; 

SLAVE START; 



123.206.17.224

--------------MYSQLI--------------

开始执行: 1486218931.2297

结束执行: 1486218949.4013

共耗时: 18.1715259552

总计执行(10000)次,成功(10000)次,失败(0)次。


--------------PDO--------------

开始执行: 1486218949.4024

结束执行: 1486218968.5342

共耗时: 19.1318359375

总计执行(10000)次,成功(10000)次,失败(0)次。


MYSQLI比PDO快0.9603099822998


===================================================

127.0.0.1

--------------MYSQLI--------------

开始执行: 1486219064.0036

结束执行: 1486219064.8307

共耗时: 0.82706999778748

总计执行(10000)次,成功(10000)次,失败(0)次。


--------------PDO--------------

开始执行: 1486219064.831

结束执行: 1486219065.7146

共耗时: 0.88354015350342

总计执行(10000)次,成功(10000)次,失败(0)次。


MYSQLI比PDO快0.056470155715942

====================================================

127.0.0.1

--------------MYSQLI--------------

开始执行: 1486219122.693

结束执行: 1486219123.5779

共耗时: 0.88489890098572

总计执行(10000)次,成功(10000)次,失败(0)次。


--------------PDO--------------

开始执行: 1486219123.5783

结束执行: 1486219124.3998

共耗时: 0.82153511047363

总计执行(10000)次,成功(10000)次,失败(0)次。


PDO比MYSQLI快0.063363790512085

====================================================

127.0.0.1

--------------MYSQLI--------------

开始执行: 1486219164.3198

结束执行: 1486219165.3083

共耗时: 0.98849296569824

总计执行(10000)次,成功(10000)次,失败(0)次。


--------------PDO--------------

开始执行: 1486219165.3086

结束执行: 1486219166.3177

共耗时: 1.0090320110321

总计执行(10000)次,成功(10000)次,失败(0)次。


MYSQLI比PDO快0.020539045333862

====================================================




结论:

1.本地程序连接远程数据库速度奇慢无比,主要是网络问题

2.远程服务器使用本机IP连接本地数据库较慢20多倍,所以还是使用127.0.0.1比较快

3.在连接远程数据库的情况下,mysqli的性能稍强与pdo,mysqli胜在数据库网络连接速度上,但差距细微



        /**

         * cracker

         * 截至(16354)耗时: 64.691699981689

         * 截至(16356)耗时: 89.576122999191

         * 截至(16353)耗时: 87.792021989822

         * 截至(16460)耗时: 115.30559492111

         * 截至(16354)耗时: 64.484688043594

         * 截至(16368)耗时: 71.312078952789

         *  unable to connect to tcp://127.0.0.1:2900

         *

         * 16352

         * 16343

         * 16358

         */


        /**

         * 空循环万次

         * 0.00099992752075195

         * 0

         * 0.0010008811950684

         * 0

         * 0.0010001659393311

         */

        /**

         * innoDB 万次

         * 69.475973844528

         * 79.686558008194

         * 79.392540931702

         * 70.874053955078

         * crash  76.892397880554

         * --------------

         * 41.769388914108

         * 41.196356058121

         * 38.514203071594

         */


        /**

         * Memory 5千次

         * 18.137037992477

         * 15.026859045029

         * 20.079149007797

         * 16.641952037811

         * 16.507943868637

         */


        /**

         * MyISAM 万次

         * 89.420114994049

         * 77.112410783768

         * 69.751988887787

         * 31.551805019379

         * 29.732701063156

         * --------------

         * 16.20192694664

         * 18.710070133209

         * 18.69206905365

         * 18.037031888962

         * 15.381880044937

         * 18.059032917023

         * 17.152981042862

         *

         * 21.865249872208

         * 20.53817486763

         * 18.204041004181

         *

         * 16.967969894409

         * 14.896852970123

         * 14.141809225082

         * 16.519944906235

         * 16.704956054688

         * 17.296989202499

         */


        /**

         *  MRG_MyISAM

         *  Table 'can_user_chat' is read only'

         */


        /**

         * BLOCKHOLE 不储存[黑洞]

         * 19.395109891891

         * 33.976943016052

         * 40.913339853287

         * 17.224985122681

         * 15.877907991409

         * 15.663895845413

         * 17.465998888016

         */


        /**

         * ARCHIVE 不支持索引

         * 18.975085020065

         * 12.190696954727

         * 18.066033840179

         */


        /**

         * CSV 不支持索引

         * 17.962027072906

         * 20.955197811127

         * 20.027145862579

         */


阅读全文 »

PHP杂项 PHP高级扩展介绍,高手必学

发表日期:2019-01-05 23:09:33 | 来源: | 分类:PHP杂项


开源项目


yaf:在PHP扩展PHP框架


yar:Yar 是一个轻量级, 高效的RPC框架, 它提供了一种简单方法来让PHP项目之间可以互相远程调用对方的本地方法. 并且Yar也提供了并行调用的能力. 可以支持同时调用多个远程服务的方法.


yac:YAC是共享存储用户数据缓存PHP。它可以用来取代APC或本地缓存。YAC是无锁的,这意味着,这是非常快的,但有可能是一个机会,你会得到一个错误的数据(取决于很多关键的时隙分配多少密钥存储),所以你最好确保你的产品是不是很敏感。


yaconf:PHP持久配置容器,它解析INI文件,在PHP启动时预加载(储存/读取)结果


Taint:一个扩展用于检测XSS代码嗅探器(污染的字符串),也可用于防范的SQL注入漏洞,壳注入,等。


Lua:Lua是一个功能强大,速度快,轻量级,可嵌入的脚本语言。" 这个扩展嵌入Lua解释器,并对lua变量和函数提供面向对象的API。 


msgpack:是一个高效的二进制序列化格式。它让你像JSON一样可以在各种语言之间交换数据。但是它比JSON更快、更小。小的整数会被编码成一个字节,短的字符串仅仅只需要比它的长度多一字节的大小。


Couchbase:PHP的客户端库提供快速访问存储在Couchbase服务器中的文档。(Couchbase是一种NoSql数据库



APC:Alternative PHP Cache 官方翻译叫”可选PHP缓存”。它为我们提供了缓存和优化PHP的中间代码的框架。 APC的缓存分两部分:系统缓存和用户数据缓存。

APC一个开源的PHP opcode 缓存框架,高速缓冲储存器工具,它能够缓存opcode的php中间码。它的目标是提供一个自由、 开放,和健全的框架用于缓存和优化PHP的中间代码。 

opcode还有另一种称谓:字节码(byte codes)。


OPcache (Zend OPCache):通过将PHP脚本预编译的字节码存储到共享内存中来提升PHP的性能,存储预编译字节码的好处就是省去了每次加载和解析PHP 脚本的开销。

Zend OPCache的前身是Zend Optimizer + (Zend O+),在PHP5.5的发行版本中自带了Zend O+,并重新命名为:Zend OPCache。但是默认是没有启用的,可以在ini文件中enable一下。据统计,zend opcache比apc性能要好,可以提升提升 5%-9%。


Zend Optimizer:Zend代码优化器


memcache:Memcache模块提供了于memcached方便的面向过程及面向对象的接口,memcached是为了降低动态web应用 从数据库加载数据而产生的一种常驻进程缓存产品。 是一套分布式的高速缓存系统,由LiveJournal的Brad

Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。

MemCache的工作流程如下:先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现);每次更新数据库的同时更新memcached中的数据,保证一致性;当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。



memcached:memcached是一个高性能分布式的内存对象缓存系统,通常被用于降低数据库加载压力以提高动态web应用的响应速度。 此扩展使用了libmemcached库提供的api与memcached服务端进行交互。它同样提供了一个session处理器(memcached)。

是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

Memcached是以守护程序(监听)方式运行于一个或多个服务器中,随时会接收客户端的连接和操作。


new memcache是pecl扩展库版本

new memcached是libmemcached版本

1、基于的库不同(我觉得这是本质区别,库的不同决定了后续差异)。memcache扩展是原生的(基于pecl扩展库)。memcached扩展是基于libmemcached库开发的,所以支持cas操作,cas操作就是多个线程并发修改同一个key的值的时候能够进行处理。

2、mc支持面向对象和面向过程两套接口操作服务端。而mcd扩展只支持面向对象方式操作。这也是库(libmemcached与libmemcache)的不同影响的。

3、 memcached支持Binary Protocol,而memcache不支持。还是库的不同导致。这意味着memcached会有更高的性能。


Memcached、memcached、memcache。

    其中首字母大写的Memcached,指的是Memcached服务器,就是独立运行Memcached的后台服务器,用于存储数据的“数据库”。

    而memcached和memcache指的是Memcached的客户端,就是通过memcached或memcache来访问Memcached服务器。

在PHP的插件中有一个memcache,还有一个memcached,两者在用法上不同。


Redis:Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便


Xcache:XCache 是一个开源的 opcode 缓存器/优化器, 这意味着他能够提高您服务器上的 PHP 性能. 他通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接使用缓冲区已编译的代码从而提高速度. 通常能够提高您的页面生成速率 2 到5 倍, 降低服务器负载.


eAccelerator(ea):eAccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。使您的PHP程序代码执效率能提高1-10倍。


Shmop:是一个易于使用的功能集,允许PHP读写创建和删除UNIX共享内存段。实现共享高速内存数据池。 类似asp/jsp的application。


php-fpm(FastCGI Process Manager:FastCGI进程管理器):是一个PHPFastCGI管理器,是只用于PHP的。性能貌似高过Fastcgi


SOA:面向服务的体系结构


SOAP:简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。SOAP、WSDL(WebServicesDescriptionLanguage)、UDDI(UniversalDescriptionDiscovery andIntegration)之一, soap用来描述传递信息的格式, WSDL 用来描述如何访问具体的接口, uddi用来管理,分发,查询webService 。具体实现可以搜索 Web Services简单实例 ; SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。SOAP使用基于XML的数据结构和超文本传输协议(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象。


RPC:RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。


cURL:(Client URL Library)curl是利用URL语法在命令行方式下工作的开源文件传输工具。PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。

主要用途是可以利用curl从不同服务器上获取资源。如用curl访问远程webservice数据接口资源,做网站的分布式。

例如:你访问一个web服务器 A,这个web服务器A可以从服务器B上读取数据,从服务器C中获取密集计算后的数据,从服务器D中获取网页图片。可以做网站的分布式。


SPL :Standard PHP Library 标准PHP类库


OAuth : (Open authorization)开放式授权协议,此扩展提供 OAuth 消费方和提供方之间的绑定。OAuth 是一种建立在 HTTP 之上的授权协议,用于允许应用程序安全访问数据而无需存储用户名和密码。 {第三方授权登录,帐号绑定功能,如用微信登录、QQ登录,深入点在于实现用我们的程序做第三方授权登录提供商}


阅读全文 »

PHP杂项 数组转XML

发表日期:2019-01-05 23:08:27 | 来源: | 分类:PHP杂项

<?php


/**

 * 数组转XML

 */

class ArrayToXML

{


private $xmlString;


private function header()

{

$this->xmlString .= '<?xml version="1.0" encoding="utf-8" ?>';

$this->xmlString .= '<root>';

}


private function footer()

{

$this->xmlString .= '</root>';

}

public function encode($array)

{


header('Content-type:text/xml;');


$this->header();


$this->paser($array);


$this->footer();


return $this->xmlString ;

}


private function paser($array)

{

foreach ($array as $key => $value)

{

$tag = is_numeric($key) ? 'item' : $key;

$this->xmlString .= "<$tag";



if (is_array($value))

{

if (isset($value['id'])) $this->xmlString .= " id=\"{$value['id']}\"";

$this->xmlString .= ">";


$this->paser($value);

}

else

{

$this->xmlString .= ">";


$this->xmlString .= $value;

}


$this->xmlString .= "</$tag>";

}

}

}


$array = array(

'code' => 200,

'message' => 'succeess',

'data' => array(

array(

'id' => 1,

'title' => 'demo2',

),

array(

'id' => 2,

'title' => 'demo3',

)

)

);



$xml = new ArrayToXML;


echo $xml->encode($array);

?>

阅读全文 »

PHP杂项 Memcache和Redis的区别

发表日期:2019-01-05 23:05:25 | 来源: | 分类:PHP杂项

1.Memcache和Redis都是用来管理数据的

2.他们的数据都是存放在内存里

3.Redis可以定期将数据备份到磁盘(永久化)

4.Memcache只是简单的key/value缓存

5.Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储



Redis常用操作:

1.开启Redis服务 redis-server.exe redis.windows.conf

开启Redis客户端新cmd窗口redis-cli.exe

2.设置键值对 set key value

3.查看键值 get key

4.设置key的过期时间,单位为秒 setex key time value

5.删除键值del key


阅读全文 »

PHP杂项 PHP7.0新特性

发表日期:2019-01-05 23:03:31 | 来源: | 分类:PHP杂项

PHP7.0新特性

php7的主题是线程优化

php之前版本,开发效率快,语言本身性能差

普通的PHP网站:IO密集型,瓶颈在mysql上,体现不出PHP的性能劣势,在密集计算的方面比C、C++、java差几十倍升至上百倍


PHP各版本 qps分数

PHP5.0 0

PHP5.1 0

PHP5.2 -------75

PHP5.3 ---------82

PHP5.4 -----------107

PHP5.5 ------------110

PHP5.6 -------------112

PHP7.0 ---------------------------------------------312


QQ农场曾经用PHP编写,后来因为线程问题,用C重构,性能提示70%

FaceBook曾经用PHP开发,后来因为性能原因,对PHP二次开发,重写了PHP核心引擎(HHVM,性能提升100%


PHP7.0 重写ZendVM 比 PHP 5.6 性能提升300%

据WordPress最新测试PHP7.0性能超越HHVM,可以说PHP的性能得到了很大的性能提升



新特性:

函数、方法支持类型声明

try{}catch(Excption e){} 异常捕获


性能优化:

zval 可以直接使用栈内存

PHP5: zval *val;MAKE_STD_ZVAL(val);

PHP7: zval val;

zend_string存储hash值,array查询不再需要重复计算hash

struct _zend_string{

zend_refcounted gc;

zend_ulong h;

size_t len;

char val[1];

}

hashtable桶内直接存储数据,减少了内存申请次数,提升了casche命中率和内容速度


阅读全文 »

PHP杂项 PHP中的魔术方法总结 :__construct, __destruct等..

发表日期:2015-10-22 16:26:22 | 来源: | 分类:PHP杂项


1、__get、__set

这两个方法是为在类和他们的父类中没有声明的属性而设计的

__get( $property ) 当调用一个未定义的属性时访问此方法

__set( $property, $value ) 给一个未定义的属性赋值时调用

这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)


2、__isset、__unset

__isset( $property ) 当在一个未定义的属性上调用isset()函数时调用此方法

__unset( $property ) 当在一个未定义的属性上调用unset()函数时调用此方法

与__get方法和__set方法相同,这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)


3、__call

__call( $method, $arg_array ) 当调用一个未定义的方法是调用此访求

这里的未定义的方法包括没有权限访问的方法


4、__autoload

__autoload 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。

注意: 在 __autoload 函数中抛出的异常不能被 catch 语句块捕获并导致致命错误。


5、__construct、__destruct

__construct 构造方法,当一个对象创建时调用此方法,使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么.这样你在改变类的名称时,就不需要改变构造方法的名称__destruct 析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源.析构函数允许你在使用一个对象之后执行任意代码来清除内存.当PHP决定你的脚本不再与对象相关时,析构函数将被调用.在一个函数的命名空间内,这会发生在函数return的时候.对于全局变量,这发生于脚本结束的时候.如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值.通常将变量赋值勤为NULL或者调用unset.


6、__clone

PHP5中的对象赋值是使用的引用赋值,如果想复制一个对象则需要使用clone方法,在调用此方法是对象会自动调用__clone魔术方法

如果在对象复制需要执行某些初始化操作,可以在__clone方法实现


7、__toString 

__toString方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时如果类没有实现此方法,则无法通过echo打印对象,否则会显示:Catchable fatal error: Object of class test could not be converted to string in此方法必须返回一个字符串


在PHP 5.2.0之前,__toString方法只有结合使用echo() 或 print()时 才能生效。PHP 5.2.0之后,则可以在任何字符串环境生效(例如通过printf(),使用%s修饰符),但 不能用于非字符串环境(如使用%d修饰符)。从PHP 5.2.0,如果将一个未定义__toString方法的对象 转换为字符串,会报出一个E_RECOVERABLE_ERROR错误。


8、__sleep、__wakeup

__sleep 串行化的时候用

__wakeup 反串行化的时候调用

serialize() 检查类中是否有魔术名称 __sleep 的函数。如果这样,该函数将在任何序列化之前运行。它可以清除对象并应该返回一个包含有该对象中应被序列化的所有变量名的数组。

使用 __sleep 的目的是关闭对象可能具有的任何数据库连接,提交等待中的数据或进行类似的清除任务。此外,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。

相反地,unserialize() 检查具有魔术名称 __wakeup 的函数的存在。如果存在,此函数可以重建对象可能具有的任何资源。

使用 __wakeup 的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。


9、__set_state

当调用var_export()时,这个静态 方法会被调用(自PHP 5.1.0起有效)。

本方法的唯一参数是一个数组,其中包含按array(’property’ => value, …)格式排列的类属性。


10、__invoke

当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。

PHP5.3.0以上版本有效

11、__callStatic

它的工作方式类似于 __call() 魔术方法,__callStatic() 是为了处理静态方法调用,

PHP5.3.0以上版本有效

PHP 确实加强了对 __callStatic() 方法的定义;它必须是公共的,并且必须被声明为静态的。同样,__call() 魔术方法必须被定义为公共的,所有其他魔术方法都必须如此。


阅读全文 »

PHP杂项 PHP配置文件php.ini详解

发表日期:2015-01-04 10:02:26 | 来源: | 分类:PHP杂项


[PHP] 

; PHP还是一个不断发展的工具,其功能还在不断地删减 

; 而php.ini的设置更改可以反映出相当的变化, 

; 在使用新的PHP版本前,研究一下php.ini会有好处的


;;;;;;;;;;;;;;;;;;; 

; 关于这个文件 ; 

;;;;;;;;;;;;;;;;;;;


; 这个文件控制了PHP许多方面的观点。为了让PHP读取这个文件,它必须被命名为 

; 'php.ini'。PHP 将在这些地方依次查找该文件:当前工作目录;环境变量PHPRC 

; 指明的路径;编译时指定的路径。 

; 在windows下,编译时的路径是Windows安装目录。 

; 在命令行模式下,php.ini的查找路径可以用 -c 参数替代。


; 该文件的语法非常简单。空白字符和用分号';'开始的行被简单地忽略(就象你可能 

; 猜到的一样)。 章节标题(例如 : [Foo])也被简单地忽略,即使将来它们可能 

; 有某种的意义。 

; 指示被指定使用如下语法: 

; 指示标识符 = 值 

; directive = value 

; 指示标识符 是 *大小写敏感的* - foo=bar 不同于 FOO = bar。 

; 值可以是一个字符串,一个数字,一个 PHP 常量 (如: E_ALL or M_PI), INI 常量中的 

; 一个 (On, Off, True, False, Yes, No and None) ,或是一个表达式 

; (如: E_ALL & ~E_NOTICE), 或是用引号括起来的字符串(" foo" ). 

; INI 文件的表达式被限制于位运算符和括号。 

; | bitwise OR 

; & bitwise AND 

; ~ bitwise NOT 

; ! boolean NOT 

; 布尔标志可用 1, On, True or Yes 这些值置于开的状态。 

; 它们可用 0, Off, False or No 这些值置于关的状态。 

; 一个空字符串可以用在等号后不写任何东西表示,或者用 None 关键字: 

; foo = ; 将foo置为空字符串 

; foo = none ; 将foo置为空字符串 

; foo = " none" ; 将foo置为字符串'none' 

; 如果你值设置中使用常量,而这些常量属于动态调入的扩展库(不是 PHP 的扩展,就是 

; Zend 的扩展),你仅可以调入这些扩展的行*之后*使用这些常量。 

; 所有在 php.ini-dist 文件里设定的值与内建的默认值相同(这是说,如果 php.ini 

; 没被使用或者你删掉了这些行,默认值与之相同)。


;;;;;;;;;;;;;;;;;;;; 

; 语言选项 ; 

;;;;;;;;;;;;;;;;;;;;


engine = On 

; 使 PHP scripting language engine(PHP 脚本语言引擎)在 Apache下有效。 

short_open_tag = On 

; 允许 tags 将被识别。 

asp_tags = Off 

; 允许ASP-style tags 

precision = 14 

; 浮点类型数显示时的有效位数


y2k_compliance = Off 

; 是否打开 2000年适应 (可能在非Y2K适应的浏览器中导致问题)


output_buffering = Off 

; 输出缓存允许你甚至在输出正文内容之后发送 header(标头,包括cookies)行 

; 其代价是输出层减慢一点点速度。你可以使用输出缓存在运行时打开输出缓存, 

; 或者在这里将指示设为 On 而使得所有文件的输出缓存打开。 

output_handler = ; 你可以重定向你的脚本的所有输出到一个函数, 

; 那样做可能对处理或以日志记录它有用。 

; 例如若你将这个output_handler 设为" ob_gzhandler" , 

; 则输出会被透明地为支持gzip或deflate编码的浏览器压缩。 

; 设一个输出处理器自动地打开输出缓冲。


implicit_flush = Off 

; 强制flush(刷新)让PHP 告诉输出层在每个输出块之后自动刷新自身数据。 

; 这等效于在每个 print() 或 echo() 调用和每个 HTML 块后调用flush()函数。 

; 打开这项设置会导致严重的运行时冲突,建议仅在debug过程中打开。


allow_call_time_pass_reference = On 

; 是否让强迫函数调用时按引用传递参数。这一方法遭到抗议, 

; 并可能在将来版本的PHP/Zend里不再支持。 

; 受到鼓励的指定哪些参数按引用传递的方法是在函数声明里。 

; 你被鼓励尝试关闭这一选项并确认你的脚本仍能正常工作,以保证在将来版本的语言里 

; 它们仍能工作。(你将在每次使用该特点时得到一个警告,而参数将按值而不是按引用 

; 传递)。


; Safe Mode 安全模式 

safe_mode = Off 

safe_mode_exec_dir = 

safe_mode_allowed_env_vars = PHP_ 

; ?Setting certain environment variables 

; ?may be a potential security breach. 

; 该指示包含用逗号分隔的前缀列表。安全模式中,用户仅可以替换 

; 以在此列出的前缀开头的环境变量的值。 

; 默认地,用户将仅能 设定以PHP_开头的环境变量,(如: PHP_FOO=BAR)。 

; 注意: 如果这一指示为空,PHP 将让用户更改任意环境变量!


safe_mode_protected_env_vars = LD_LIBRARY_PATH 

; 这条指示包含一个用逗号分隔的环境变量列表,那是最终用户将不能用putenv () 更改的。 

; 这些变量甚至在safe_mode_allowed_env_vars 设置为允许的情况下得到保护。


disable_functions = 

; 这条指示让你可以为了安全的原因让特定函数失效。 

; 它接受一个用逗号分隔的函数名列表。 

; 这条指示 *不受* 安全模式是否打开的影响。


; 语法高亮模式的色彩。 

; 只要能被接受的东西就能工作。


highlight.string = #DD0000 

highlight.comment = #FF8000 

highlight.keyword = #007700 

highlight.bg = #FFFFFF 

highlight.default = #0000BB 

highlight.html = #000000


; Misc 杂项 

expose_php = Off 

; 决定 PHP 是否标示它装在服务器上的事实(例如:加在它 — PHP— 给Web服务 

; 发送的信号上)。 

; (我个人的意见,在出现什么power-by的header的时候,把这关掉。) 

; 它不会有安全上的威胁, 但它使检查你的服务器上是否安装了PHP成为了可能。


;;;;;;;;;;;;;;;;;;; 

; Resource Limits ; 

;;;;;;;;;;;;;;;;;;;


max_execution_time = 30 ; 每个脚本的最大执行时间, 按秒计 

memory_limit = 8388608 ; 一个脚本最大可使用的内存总量 (这里是8MB)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

; Error handling and logging ; 

; 出错控制和登记 ; 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

; 错误报告是按位的。或者将数字加起来得到想要的错误报告等级。 

; E_ALL - 所有的错误和警告 

; E_ERROR - 致命性运行时错 

; E_WARNING - 运行时警告(非致命性错) 

; E_PARSE - 编译时解析错误 

; E_NOTICE - 运行时提醒(这些经常是是你的代码的bug引起的, 

;也可能是有意的行为造成的。(如:基于未初始化的变量自动初始化为一个 

;空字符串的事实而使用一个未初始化的变量)


; E_CORE_ERROR - 发生于PHP启动时初始化过程中的致命错误 

; E_CORE_WARNING - 发生于PHP启动时初始化过程中的警告(非致命性错) 

; E_COMPILE_ERROR - 编译时致命性错 

; E_COMPILE_WARNING - 编译时警告(非致命性错) 

; E_USER_ERROR - 用户产生的出错消息 

; E_USER_WARNING - 用户产生的警告消息 

; E_USER_NOTICE - 用户产生的提醒消息 

; 例子: 

; error_reporting = E_ALL & ~E_NOTICE ; 显示所有的错误,除了提醒 

; error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR ; 仅显示错误 

error_reporting = E_ALL & ~E_NOTICE ; 显示所有的错误,除了提醒 

display_errors = On ; 显示出错误信息(作为输出的一部分) 

; 在最终发布的web站点上,强烈建议你关掉这个特性,并使用 

; 错误日志代替(参看下面)。 

; 在最终发布的web站点继续让 display_errors 有效可能 

; 暴露一些有关安全的信息,例如你的web服务上的文件路径、 

; 你的数据库规划或别的信息。 

display_startup_errors = Off ; 甚至当display_erroes打开了,发生于PHP的启动的步骤中 

; 的错误也不会被显示。 

; 强烈建议保持使 display_startup_errors 关闭, 

; 除了在改错过程中。 

log_errors = Off ; 在日志文件里记录错误(服务器指定的日志,stderr标准错误输出,或error_log(下面的)) 

; 正如上面说明的那样,强烈建议你在最终发布的web站点以日志记录错误 

; 取代直接错误输出。


track_errors = Off ; 保存最近一个 错误/警告 消息于变量 $php_errormsg (boolean) 

;error_prepend_string = " " ; 于错误信息前输出的字符串 

;error_append_string = " " ; 于错误信息后输出的字符串 

;error_log = filename ; 记录错误日志于指定文件 

;error_log = syslog ; 记录错误日志于系统日志 syslog (NT 下的事件日志, Windows 95下无效) 

warn_plus_overloading = Off ; 当将‘ +’ 用于字符串时警告


;;;;;;;;;;;;;;;;; 

; Data Handling ; 

;;;;;;;;;;;;;;;;; 

variables_order = " EGPCS" ; 这条指示描述了PHP 记录 

; GET, POST, Cookie, Environment and Built-in 这些变量的顺序。 

; (以 G, P, C, E & S 代表,通常以 EGPCS 或 GPC 的方式引用)。 

; 按从左到右记录,新值取代旧值。


register_globals = On ; 是否将这些 EGPCS 变量注册为全局变量。 

; 若你不想让用户数据不在全局范围内混乱的话,你可能想关闭它。 

; 这和 track_vars 连起来用更有意义 — 这样你可以通过 

; $HTTP_*_VARS[] 数组访问所有的GPC变量。


register_argc_argv = On ; 这条指示告诉 PHP 是否声明 argv和argc 变量 

; (注:这里argv为数组,argc为变量数) 

; (其中包含用GET方法传来的数据)。 

; 若你不想用这些变量,你应当关掉它以提高性能。


track_vars = On ; 使$HTTP_*_VARS[]数组有效,这里*在使用时用 

; ENV, POST, GET, COOKIE or SERVER替换 

post_max_size = 8M ; PHP将接受的POST数据最大大小。


gpc_order = " GPC" ; 这条指示被人反对。用 variables_order 代替。


; Magic quotes 

magic_quotes_gpc = On ; 在输入的GET/POST/Cookie数据里使用魔术引用 

; (原文就这样,呵呵,所谓magic quotes 应该是指用转义符加在引用性的控制字符上,如 '....) 

magic_quotes_runtime= Off ; 对运行时产生的数据使用魔术引用, 

; 例如:用SQL查询得到的数据,用exec()函数得到的数据,等等 

magic_quotes_sybase = Off ; 采用 Sybase形式的魔术引用(用 '' 脱出 ' 而不用 ')


; 自动在 PHP 文档之前和之后添加文件 

auto_prepend_file = 

auto_append_file =


; 象4.04b4一样,PHP 默认地总是在 “ Content-type:” 头标输出一个字符的编码方式。 

; 让输出字符集失效,只要设置为空。 

; PHP 的内建默认值是 text/html 

default_mimetype = " text/html" 

;default_charset = " iso-8859-1"


;;;;;;;;;;;;;;;;;;;;;;;;; 

; Paths and Directories ; 

;;;;;;;;;;;;;;;;;;;;;;;;; 

include_path = ; include 路径设置,UNIX: " /path1:/path2" Windows: " path1;path2" 

doc_root = ; php 页面的根路径,仅在非空时有效 

user_dir = ; 告知 php 在使用 /~username 打开脚本时到哪个目录下去找,仅在非空时有效 

;upload_tmp_dir = ; 存放用HTTP协议上载的文件的临时目录(在没指定时使用系统默认的) 

upload_max_filesize = 2097152 ; 文件上载默认地限制为2 Meg 

extension_dir = c:php ; 存放可加载的扩充库(模块)的目录 

enable_dl = On ; 是否使dl()有效。 

; 在多线程的服务器上 dl()函数*不能*很好地工作, 

; 例如IIS or Zeus,并在其上默认为禁止


;;;;;;;;;;;;;;;; 

; File Uploads ; 

;;;;;;;;;;;;;;;; 

file_uploads = On ; 是否允许HTTP方式文件上载 

;upload_tmp_dir = ; 用于HTTP上载的文件的临时目录(未指定则使用系统默认) 

upload_max_filesize = 2M ; 上载文件的最大许可大小


; Fopen wrappers ; 

;;;;;;;;;;;;;;;;;; 

allow_url_fopen = On ; 是否允许把URLs当作http:.. 或把文件当作ftp:...


;;;;;;;;;;;;;;;;;;;;;; 

; 动态扩展 ; 

; Dynamic Extensions ; 

;;;;;;;;;;;;;;;;;;;;;; 

; 若你希望一个扩展库自动加载,用下面的语法: 

; extension=modulename.extension 

; 例如,在windows上, 

; extension=msql.dll 

; or 在UNIX下, 

; extension=msql.so 

; 注意,这只应当是模块的名字,不需要目录信息放在里面。 

; 用上面的 extension_dir 指示指定扩展库的位置。


;Windows 扩展 

;extension=php_nsmail.dll 

extension=php_calendar.dll 

;extension=php_dbase.dll 

;extension=php_filepro.dll 

extension=php_gd.dll 

;extension=php_dbm.dll 

;extension=php_mssql.dll 

;extension=php_zlib.dll 

;extension=php_filepro.dll 

;extension=php_imap4r2.dll 

;extension=php_ldap.dll 

;extension=php_crypt.dll 

;extension=php_msql2.dll 

;extension=php_odbc.dll 

; 注意, MySQL的支持现在是内建的,因此,不需要用它的dll


;;;;;;;;;;;;;;;;;;; 

; 模块设定 ; 

; Module Settings ; 

;;;;;;;;;;;;;;;;;;;


[Syslog] 

define_syslog_variables = Off ; 是否定义各种的系统日志变量 

; 如:$LOG_PID, $LOG_CRON, 等等。 

; 关掉它是个提高效率的好主意。 

; 运行时,你可以调用函数define_syslog_variables(),来定义这些变量


[mail function] 

SMTP = localhost ;仅用于win32系统 

sendmail_from = me@localhost.com ;仅用于win32系统 

;sendmail_path = ;仅用于unix, 也可支持参数(默认的是'sendmail -t -i')


[Debugger] 

debugger.host = localhost 

debugger.port = 7869 

debugger.enabled = False


[Logging] 

; 这些配置指示用于示例的日志记录机制。 

; 看 examples/README.logging 以得到更多的解释 

;logging.method = db 

;logging.directory = /path/to/log/directory


[Java] 

;java.class.path = .php_java.jar 

;java.home = c:jdk 

;java.library = c:jdkjreinhotspotjvm.dll 

;java.library.path = .


[SQL] 

sql.safe_mode = Off


[ODBC] 

;uodbc.default_db = Not yet implemented 

;uodbc.default_user = Not yet implemented 

;uodbc.default_pw = Not yet implemented 

uodbc.allow_persistent = On ; 允许或禁止 持久连接 

uodbc.check_persistent = On ; 在重用前检查连接是否还可用 

uodbc.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制 

uodbc.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制 

uodbc.defaultlrl = 4096 ; 控制 LONG 类型的字段。返回变量的字节数,0 代表通过(?)0 means passthru 

uodbc.defaultbinmode = 1 ; 控制 二进制数据。0 代表?????Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char 

; 见有关 odbc_binmode 和 odbc_longreadlen 的文档以得到 uodbc.defaultlrl 和 uodbc.defaultbinmode 的解释。


[MySQL] 

mysql.allow_persistent = On ; 允许或禁止 持久连接 

mysql.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制 

mysql.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制 

mysql.default_port = ; mysql_connect() 使用的默认端口,如不设置,mysql_connect() 

; 将使用变量 $MYSQL_TCP_PORT,或在/etc/services 下的mysql-tcp 条目(unix), 

; 或在编译是定义的 MYSQL_PORT(按这样的顺序) 

; Win32环境,将仅检查MYSQL_PORT。 

mysql.default_socket = ; 用于本地 MySql 连接的默认的套接字名。为空,使用 MYSQL 内建值


mysql.default_host = ; mysql_connect() 默认使用的主机(安全模式下无效) 

mysql.default_user = ; mysql_connect() 默认使用的用户名(安全模式下无效) 

mysql.default_password = ; mysql_connect() 默认使用的密码(安全模式下无效) 

; 注意,在这个文件下保存密码通常是一个*坏*主意 

; *任何*可以使用PHP访问的用户可以运行 

; 'echo cfg_get_var(" mysql.default_password" )'来显示那个密码! 

; 而且当然地,任何有读该文件权力的用户也能看到那个密码。


[mSQL] 

msql.allow_persistent = On ; 允许或禁止 持久连接 

msql.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制 

msql.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制


[PostgresSQL] 

pgsql.allow_persistent = On ; 允许或禁止 持久连接 

pgsql.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制 

pgsql.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制


[Sybase] 

sybase.allow_persistent = On ; 允许或禁止 持久连接 

sybase.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制 

sybase.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制 

;sybase.interface_file = " /usr/sybase/interfaces" 

sybase.min_error_severity = 10 ; 显示的错误的最低严重性 

sybase.min_message_severity = 10 ; 显示的消息的最低重要性 

sybase.compatability_mode = Off ; 与旧版的PHP 3.0 兼容的模式。若打开,这将导致 PHP 自动地 

; 把根据结果的 Sybase 类型赋予它们, 

; 而不是把它们全当成字符串。 

; 这个兼容模式不会永远留着, 

; 因此,将你的代码进行需要的修改, 

; 并将该项关闭。


[Sybase-CT] 

sybct.allow_persistent = On ; 允许或禁止 持久连接 

sybct.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制 

sybct.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制 

sybct.min_server_severity = 10 ; 显示的错误的最低严重性 

sybct.min_client_severity = 10 ; 显示的消息的最低重要性


[bcmath] 

bcmath.scale = 0 ; 用于所有bcmath函数的10十进制数数字的个数number of decimal digits for all bcmath functions


[browscap] 

;browscap = extra/browscap.ini 

browscap = C:WINSYSTEMinetsrvrowscap.ini 

[Informix] 

ifx.default_host = ; ifx_connect() 默认使用的主机(安全模式下无效) 

ifx.default_user = ; ifx_connect() 默认使用的用户名(安全模式下无效) 

ifx.default_password = ; ifx_connect() 默认使用的密码(安全模式下无效) 

ifx.allow_persistent = On ; 允许或禁止 持久连接 

ifx.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制 

ifx.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制 

ifx.textasvarchar = 0 ; 若打开,select 状态符返回一个 ‘ text blob’ 字段的内容,而不是它的id 

ifx.byteasvarchar = 0 ; 若打开,select 状态符返回一个 ‘ byte blob’ 字段的内容,而不是它的id 

ifx.charasvarchar = 0 ; 追踪从固定长度的字符列里剥离的空格。 

; 可能对 Informix SE 用户有效。 

ifx.blobinfile = 0 ; 若打开,text和byte blobs 的内容被导出到一个文件 

; 而不是保存到内存。 

ifx.nullformat = 0 ; NULL(空)被作为空字段返回,除非,这里被设为1。 

; 这种情况下(为1),NULL作为字串NULL返回。


[Session] 

session.save_handler = files ; 用于保存/取回数据的控制方式 

session.save_path = C:win emp ; 在 save_handler 设为文件时传给控制器的参数, 

; 这是数据文件将保存的路径。 

session.use_cookies = 1 ; 是否使用cookies 

session.name = PHPSESSID 

; 用在cookie里的session的名字 

session.auto_start = 0 ; 在请求启动时初始化session 

session.cookie_lifetime = 0 ; 为按秒记的cookie的保存时间, 

; 或为0时,直到浏览器被重启 

session.cookie_path = / ; cookie的有效路径 

session.cookie_domain = ; cookie的有效域 

session.serialize_handler = php ; 用于连接数据的控制器 

; php是 PHP 的标准控制器。 

session.gc_probability = 1 ; 按百分比的'garbage collection(碎片整理)'进程 

; 在每次 session 初始化的时候开始的可能性。 

session.gc_maxlifetime = 1440 ; 在这里数字所指的秒数后,保存的数据将被视为 

; '碎片(garbage)'并由gc 进程清理掉。 

session.referer_check = ; 检查 HTTP引用以使额外包含于URLs中的ids无效 

session.entropy_length = 0 ; 从文件中读取多少字节 

session.entropy_file = ; 指定这里建立 session id 

; session.entropy_length = 16 

; session.entropy_file = /dev/urandom 

session.cache_limiter = nocache ; 设为{nocache,private,public},以决定 HTTP 的 

; 缓存问题 

session.cache_expire = 180 ; 文档在 n 分钟后过时 

session.use_trans_sid = 1 ; 使用过渡性的 sid 支持,若编译时许可了 

; --enable-trans-sid 

url_rewriter.tags = " a=href,area=href,frame=src,input=src,form=fakeentry"


[MSSQL] 

;extension=php_mssql.dll 

mssql.allow_persistent = On ; 允许或禁止 持久连接 

mssql.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制 

mssql.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制 

mssql.min_error_severity = 10 ; 显示的错误的最低严重性 

mssql.min_message_severity = 10 ; 显示的消息的最低重要性 

mssql.compatability_mode = Off ; 与旧版的PHP 3.0 兼容的模式。


[Assertion] 

; ????? 

;assert.active = On ; ?assert(expr); active by default 

;assert.warning = On ; issue a PHP warning for each failed assertion. 

;assert.bail = Off ; don't bail out by default. 

;assert.callback = 0 ; user-function to be called if an assertion fails. 

;assert.quiet_eval = 0 ; eval the expression with current error_reporting(). set to true if you want error_reporting(0) around the eval().


[Ingres II] 

ii.allow_persistent = On ; 允许或禁止 持久连接 

ii.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制 

ii.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制 

ii.default_database = ; 默认 database (format : [node_id::]dbname[/srv_class] 

ii.default_user = ; 默认 user 

ii.default_password = ; 默认 password


[Verisign Payflow Pro] 

pfpro.defaulthost = " test.signio.com" ; 默认的 Signio 服务器 

pfpro.defaultport = 443 ; 连接的默认端口 

pfpro.defaulttimeout = 30 ; 按秒计的默认超时时间


; pfpro.proxyaddress = ; 默认的代理的 IP 地址(如果需要) 

; pfpro.proxyport = ; 默认的代理的端口 

; pfpro.proxylogon = ; 默认的代理的登录(logon 用户名) 

; pfpro.proxypassword = ; 默认的代理的密码


[Sockets] 

sockets.use_system_read = On ; 使用系统的read() 函数替代 php_read()封装 

; Local Variables: (局部变量) 

; tab-width: 4 

; End


阅读全文 »

全部博文(1589)
集速网 copyRight © 2015-2025 宁ICP备15000399号-1 宁公网安备 64010402001209号
与其临渊羡鱼,不如退而结网
欢迎转载、分享、引用、推荐、收藏。