(转)问题:
有没有办法在php中实现多线程呢?
假设你正在写一个基于多台服务器的php应用,理想的情况时同时向多台服务器发送请求,而不是一台接一台。
可以实现吗?
回答:
当有人想要实现并发功能时,他们通常会想到用fork或者spawn threads,但是当他们发现php不支持多线程的时候,大概会转换思路去用一些不够好的语言,比如perl。
其实的是大多数情况下,你大可不必使用fork或者线程,并且你会得到比用fork或thread更好的性能。
假设你要建立一个服务来检查正在运行的n台服务器,以确定他们还在正常运转。你可能会写下面这样的代码:
$hosts = array("host1.sample.com", "host2.sample.com", "host3.sample.com");
$timeout = 15;
$status = array();
foreach ($hosts as $host) {
$errno = 0;
$errstr = "";
$s = fsockopen($host, 80, $errno, $errstr, $timeout);
if ($s) {
$status[$host] = "Connectedn";
fwrite($s, "HEAD / HTTP/1.0rnHost: $hostrnrn");
do {
$data = fread($s, 8192);
if (strlen($data) == 0) {
break;
}
$status[$host] .= $data;
} while (true);
fclose($s);
} else {
$statu ......
1.取得当前内存使用大小:memory_get_usage()
2.计算执行时间:microtime(true)
3.设置script执行时间限制set_time_limit
4.设置内存限制ini_set("memory_limit","256M");
3.从远程下载文件的两个方法:
$contents=file_get_contents("http://www.govtrack.us/data/us/gis/zip4dist-prefix.txt.gz");
$file = fopen($file_name, "wb");
fwrite($file, $contents);
fclose($file);
$handle = fopen("http://www.govtrack.us/data/us/gis/zip4dist-prefix.txt.gz", "rb");
$file = fopen($file_name, "wb");
$contents = '';
while (!feof($handle)) {
$contents = fread($handle, 8192);
fwrite($file, $contents);
}
fclose($file);
fclose($handle);
......
最近工作中遇到一个头疼的问题:php中调用一个存储过程(要复制N多数据的.),由于此过程执行时间很长.导致php总是超时错误:
Service Temporarily Unavailable
The
server is temporarily unable to service your request due to maintenance downtime
or capacity problems
.
Please
try
again
later
.
问题折腾了好久,一直没找到原因.分别是:
php开头加上: set_time_limit(0);
不管用.
php.ini中设置timeout的时间:
session.cookie_lifetime = 0
session.gc_maxlifetime =
3440
pfpro.defaulttimeout = 3600
max_execution_time =
3600
max_input_time = 3600 ;
还是不管用.
设置mysql的配置文件my.ini:
connect_timeout=3600
wait_timeout=2880000
interactive_timeout
= 2880000
max_allowed_packet = 10M
还是还是不管用.
Apache中设置httpd.conf 超时:
#Timeout:
Sec.
Timeout 360000
#KeepAlive: Off | On
KeepAlive
On
#M ......
文档是这么说的:
PHP 的引用允许用两个变量来指向同一个内容。意思是,当这样做时:
<?php
$a
=&
$b
;
?>
这意味着 $a
和 $b
指向了同一个变量。
注: $a
和 $b
在这里是完全相同的,这并不是 $a
指向了 $b
或者相反,而是 $a
和 $b
指向了同一个地方。
所以:
<?php
$a = 1;
$b = 2;
$c = &$a;
$c = 2;
if(($c = 3) || ($b = $a)){
$a++;
$b++;
$c++;
}
printf("%d,%d,%x\n",$a,$b,$c);
if( ($c = 3) | ($b = $a)){
$a++;$b++;
}
printf("%d,%d,%x\n",$a,$b,$c);
?>
输出的内容是:5,3,5
4,4,4 ......
昨天回家来,今天粗略看了一下《大道PHP》,书很细,C++的也是大概看了一下,总之,收获不大,也许第一天的缘故吧。
必须排除干扰,死心蹋地的学习了,高效的完成寒假的任务,PHP和C++基本功,VC++,MFC,可能的话,分析一下Dizcuss也是不错的,养成良好的编程风格和习惯。下半年,俊杰会去主楼正是,进步的机会,他在进行C#.net的开发和学习,条件比我好些,但是速度和质量是关键,我的不足:编程基础弱,数据结构没学过,这要下半学期恶补。其实说到底,是和自己赛跑,和懒惰赛跑,明天早晨必须六点一刻起床,否则视为懒惰一次,必须自我加压,自我炼钢,最后的崛起机会,一定要抓住。
关于《大道PHP》,每天最低5章,不会的以后可以复习,结合视频,晚上晚睡会,早上早起会,我不信别人能做到的,我就做不到。
我要好好磨练自己的性子,开学后找个人一起上自习,看书写字都OK,把屁股沉下来,把脑子静下来,想象两年后毕业时,我手中应有什么样的筹码。
这个假期,我要把自己感动的,热泪盈眶。
2010.1.12 ......
<?php
/*
图片处理类:缩略,裁剪,圆角,倾斜
*/
class resizeimage
{
//图片类型
var $type;
//实际宽度
var $width;
//实际高度
var $height;
//改变后的宽度
var $resize_width;
//改变后的高度
var $resize_height;
//是否裁图
var $cut;
//源图象
var $srcimg;
//目标图象地址
var $dstimg;
//圆角源
var $corner;
var $im;
function resizeimage($img, $corner, $wid, $hei,$c, $corner_radius, $angle)
{
$this->srcimg = $img;
$this->corner = $corner;
$this->resize_width = $wid;
$this->resize_height = $hei;
$this-& ......