最近无聊做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" />
注意上面四点应该就可以了.!
本文链接
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);
?>
本文链接
(伪)多线程:借助外力
利用WEB服务器本身的多线程来处理,从WEB服务器多次调用我们需要实现多线程的程序。
QUOTE:
我们知道PHP本身是不支持多线程的, 但是我们的WEB服务器是支持多线程的.
也就是说可以同时让多人一起访问. 这也是我在PHP中实现多线程的基础.
假设我们现在运行的是a.php这个文件. 但是我在程序中又请求WEB服务器运行另一个b.php
那么这两个文件将是同时执行的.
(PS: 一个链接请求发送之后, WEB服务器就会执行它, 而不管客户端是否已经退出)
有些时候, 我们想运行的不是另一个文件, 而是本文件中的一部分代码.该怎么办呢?
其实可是通过参数来控制a.php来运行哪一段程序.
下面看一个例子:
打开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服务器环境运行。
以下为简短的测试代码: