当前位置:  编程技术>php
本页文章导读:
    ▪php中文乱码      最近无聊做PHP页面连接mysql就发现中文乱码最终解决,现记录下,以日后查阅 1.建立数据库的时候,选择utf-8编码2.建立php 文件的时候选择UTF-8编码3.防止数据传输中乱码 mysql_query('set names utf.........
    ▪PHP 绘图技术      1、图片格式:目前网站开发常见的图片格式有gif,jpg/jpeg,png .....区别:gif 图片压缩率高,但是只能显示256色,可能造成颜色的丢失,可以显示动画jpg/jpeg 图片压缩率高(有损压缩),可以用较小.........
    ▪PHP中的(伪)多线程与多进程      (伪)多线程:借助外力     利用WEB服务器本身的多线程来处理,从WEB服务器多次调用我们需要实现多线程的程序。QUOTE:我们知道PHP本身是不支持多线程的, 但是我们的WEB服务器是支持.........

[1]php中文乱码
    来源:    发布时间: 2013-11-07

最近无聊做PHP页面连接mysql

就发现中文乱码

最终解决,现记录下,以日后查阅

 

1.建立数据库的时候,选择utf-8编码

2.建立php 文件的时候选择UTF-8编码

3.防止数据传输中乱码 mysql_query('set names utf8');

4.在静态页面加上 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

注意上面四点应该就可以了.!

本文链接


    
[2]PHP 绘图技术
    来源:    发布时间: 2013-11-07

1、图片格式:目前网站开发常见的图片格式有gif,jpg/jpeg,png .....


区别:

  • gif 图片压缩率高,但是只能显示256色,可能造成颜色的丢失,可以显示动画

  • jpg/jpeg 图片压缩率高(有损压缩),可以用较小的文件来显示,网页上用得比较多

  • png 该格式综合了gif和jpg的优势,缺点是不能显示动画


2、通过PHP编程来绘图



<?php

//绘图技术 基本步骤 前提:在php.ini文件中启用gd库

//创建画布 默认背景是黑色的
$img=imagecreatetruecolor(400,300);

//绘制各种图形
//创建一个颜色
$background = imagecolorallocate($img, 255, 0, 0);
//画圆
//imageellipse($img,30,30,50,50,$background);
//椭圆
//imageellipse($img,30,30,50,30,$background);
//画直线
//imageline($img,0,0,400,300,$background);
//画矩形
//imagerectangle ($img, 50 , 20 , 100 , 40 , $background);
//填充矩形
//imagefilledrectangle ($img, 50 , 20 , 100 , 40 , $background);
//画弧线
//imagearc($img, 100, 100, 150, 150, 180, 270, $background);
//画扇型 IMG_ARC_CHORD直线连接了起始和结束点 IMG_ARC_PIE
//imagefilledarc($img, 100, 100, 150, 150, 180, 270, $background,IMG_ARC_PIE);

//拷贝图片到画布
/* $scrImg=imagecreatefromgif('http://www.baidu.com/img/shouye_b5486898c692066bd2cbaeda86d74448.gif');
$scrImgInfo=getimagesize('http://www.baidu.com/img/shouye_b5486898c692066bd2cbaeda86d74448.gif');
imagecopy ($img,$scrImg,10,10,0,0,$scrImgInfo[0],$scrImgInfo[1]);
*/
//imagecopy ($img,$scrImg,10,10,0,0,270,129);

//写字
//imagestring ($img , 5 , 20 , 20 , "hello,world", $background );
//写中文
$str="PHP绘画技术";
imagettftext ($img , 30 , 0 , 50 ,50, $background , "MSYHBD.TTF" , $str);

//输出图像到网页(或者另存为)
header("content-type: image/png");
imagepng($img);

//销毁该图片(释放内存)
imagedestroy($img);
?>


 

本文链接


    
[3]PHP中的(伪)多线程与多进程
    来源:    发布时间: 2013-11-07

(伪)多线程:借助外力

    利用WEB服务器本身的多线程来处理,从WEB服务器多次调用我们需要实现多线程的程序。

QUOTE:

我们知道PHP本身是不支持多线程的, 但是我们的WEB服务器是支持多线程的.

也就是说可以同时让多人一起访问. 这也是我在PHP中实现多线程的基础.

假设我们现在运行的是a.php这个文件. 但是我在程序中又请求WEB服务器运行另一个b.php

那么这两个文件将是同时执行的.

(PS: 一个链接请求发送之后, WEB服务器就会执行它, 而不管客户端是否已经退出)

有些时候, 我们想运行的不是另一个文件, 而是本文件中的一部分代码.该怎么办呢?

其实可是通过参数来控制a.php来运行哪一段程序.

下面看一个例子:

[php] view plaincopy
  • <?php  
  • function runThread(){  
  •     $fp = fsockopen('localhost', 80, $errno, $errmsg);  
  •     fputs($fp, "GET /a.php?act=brnrn");//这里的第二个参数是HTTP协议中规定的请求头,不明白的请看RFC中的定义                               
  •     fclose($fp);  
  • }  
  • function a(){  
  •     $fp = fopen('result_a.log', 'w');  
  •     fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");  
  •     fclose($fp);          
  • }  
  • function b(){  
  •     $fp = fopen('result_b.log', 'w');  
  •     fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");  
  •     fclose($fp);          
  • }  
  • if(!isset($_GET['act'])){ $_GET['act'] = 'a';};  
  •   
  • if($_GET['act'] == 'a'){  
  •     runThread();  
  •     a();  
  • }else if($_GET['act'] == 'b'){   
  •     b();  
  • };  
  • ?>  
  •  

    打开result_a.log 和 result_b.log 比较一下两个文件的中访问的时间. 大家会发现, 这两个的确是在不同线程中运行的.
    有些时间完全一样.

    上面只是一个简单的例子, 大家可以改进成其它形式.


    既然PHP中也能多线程了, 那么问题也来了, 那就是同步的问题. 我们知道 PHP本身是不支持多线程的. 所以更不会有什么像

    Java 中synchronize的方法了. 那我们该如何做呢.

    1. 尽量不访问同一个资源. 以避免冲突. 但是可以同时像数据库操作. 因为数据库是支持并发操作的. 所以在多线程的PHP中

    不要向同一个文件中写入数据. 如果必须要写的话, 用别的方法进行同步.. 如调用 flock对文件进行加锁等. 或建立临时文件

    并在另外的线程中等待这个文件的消失 while(file_exits('xxx')); 这样就等于这个临时文件存在时, 表示其实线程正在操作

    如果没有了这个文件, 说明其它线程已经释放了这个.

    2. 尽量不要从runThread在执行fputs后取这个socket中读取数据. 因为要实现多线程, 需要的用非阻塞模式. 即在像fgets这

    样的函数时立即返回.. 所以读写数据就会出问题. 如果使用阻塞模式的话, 程序就不算是多线程了. 他要等上面的返回才执行

    下面的程序. 所以如果需要交换数据最后利用外面文件或数据中完成. 实在想要的话就用socket_set_nonblock($fp) 来实现.


    说了这么多, 倒底这个有没有实际的意义呢? 在什么时候需要这种用这种方法呢 ?

    答案是肯定的. 大家知道. 在一个不断读取网络资源的应用中, 网络的速度是瓶颈. 如果采多这种形式就可以同时以多个线程对

    不同的页面进行读取.

    本人做的一个能从8848、soaso这些商城网站搜索信息的程序。还有一个从阿里巴巴网站上读取商业信息和公司目录的程序也用到

    了此技术。 因为这两个程序都是要不断的链接它们的服务器读取信息并保存到数据库。 利用此技术正好消除了在等待响应时的瓶

    颈。
    多进程:使用PHP的Process Control Functions(PCNTL/线程控制函数)
        函数参考可见:http://www.php.net/manual/zh/ref.pcntl.php
        只能用在Unix Like OS,Windows不可用。
        编译php的时候,需要加上--enable-pcntl,且推荐仅仅在CLI模式运行,不要在WEB服务器环境运行。
        以下为简短的测试代码:

    [php] view plaincopy
  • declare(ticks=1);  
  • $bWaitFlag = FALSE; /// 是否等待进程结束  
  • $intNum = 10;           /// 进程总数  
  • $pids = array();        ///  进程PID数组  
  • echo ("Start\n");  
  • for($i = 0; $i < $intNum; $i++) {  
  •   
        
  • 最新技术文章:
    ▪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