当前位置:  编程技术>php
本页文章导读:
    ▪基于php实现长连接的方法与注意事项的问题       php可以通过set_time_limit(0);来取消php脚步超时限制,从而达到长连接的效果。 例子代码如下: 代码如下:<?php echo "每隔3秒输出一次<br />"; set_time_limit(0); //保证php程序运行不超时退出 whil.........
    ▪Apache服务器无法使用的解决方法       原因一:80端口占用例如IIS,另外就是迅雷。我的apache服务器就是被迅雷害得无法启用!原因二:软件冲突装了某些软件会使apache无法启动如Dr.com 你打开网络连接->TcpIp属性->高级->WINS.........
    ▪setcookie中Cannot modify header information-headers already sent by错误的解决方法详解       代码如下:<?php   setcookie("username","bu",time()+3600);   echo "aaaaa";?>运行有警告Warning: Cannot modify header information - headers already sent by  下面是别人建议 方法一:在PHP里Cookie的使用是有一些限制.........

[1]基于php实现长连接的方法与注意事项的问题
    来源: 互联网  发布时间: 2013-11-30

php可以通过set_time_limit(0);来取消php脚步超时限制,从而达到长连接的效果。

例子代码如下:

代码如下:

<?php

echo "每隔3秒输出一次<br />";

set_time_limit(0); //保证php程序运行不超时退出

while(1) {

   echo date("H:i:s")."<br />";

   ob_flush();

   flush(); //刷新并输出PHP缓冲数据

   sleep(3); //延迟3秒

}

?>

示例代码2:

代码如下:

set_time_limit(0);

header("Connection:Keep-Alive");

header("Proxy-Connection:Keep-Alive");

for($i=0;$i<60;$i++) {

   print 'text'.$i.'<br>';

   ob_flush();

   flush();

   sleep(1);

   clearstatcache();

}


这里调用了ob_flush();   flush();来强制输出数据到缓冲区,这样就能在脚步返回之前及时返回数据到浏览器。另外不冲下flush和ob_flush的使用上有一些特别容易犯错的地方,造成无法刷新输出缓冲。

一. flush和ob_flush的正确顺序,正确应是,先ob_flush再flush,如下:

ob_flush();

flush();

如果Web服务器的操作系统是windows系统,那顺序颠倒或者不使用ob_flush()也不会出现问题。但是在Linux系统上就无法刷新输出缓冲。
 

二. 使用ob_flush()前,确保前面的内容大小足够4069字符。

一些Web服务器的output_buffering默认是4069字符或者更大,即输出内容必须达到4069字符服务器才会flush刷新输出缓冲,为了确保flush有效,最好在ob_flush()函数前有以下语句:

print str_repeat(" ", 4096);

以确保到达output_buffering值。

代码如下:

for ($i=10; $i>0; $i--)

{

echo $i.'<br />';

ob_flush();

flush();

sleep(1);

}
ob_end_flush();


    
[2]Apache服务器无法使用的解决方法
    来源: 互联网  发布时间: 2013-11-30

原因一:80端口占用例如IIS,另外就是迅雷。我的apache服务器就是被迅雷害得无法启用!

原因二:软件冲突装了某些软件会使apache无法启动如Dr.com 你打开网络连接->TcpIp属性->高级->WINS标签把netbios的lmhosts对勾去掉,禁用tcp/ip的netbios. 然后再启动应该就可以了。


原因三:httpd.conf配置错误如果apache的配置文件httpd.conf搞错了,在windows里启动它,会提示the requested operation has failed,这是比较郁闷的事,因为查错要看个半天。其实可以用命令行模式启动apache,并带上参数,apache会提示你哪句有误,然后就可以针对性的解决。

检查错误方法
 
     进入cmd 然后进入 Apache安装目录(具体为你自己的安装目录)\bin> httpd.exe -w -n "Apache2" -k start (引号中的Apache2修改为你的Apache服务名,我的是2.2.4版,服务名就是Apache2,可以到计算机服务里找)

     提示133行有问题时(提示:Syntax error on line 133 of ...........),打开Apache安装目录\conf\httpd.conf 找到第133行的ServerAdmin (没有工具确定行数的按ctrl+F 用"ServerAdmin"关键字查找,一般会有两个,下面那个就是)这行在其后空一格,随便加个名字,例如,加上abc后,就可以解决了.

     如果是端口占用(提示:(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。),先退出Apache,在httpd.conf中搜索Listen 80 ,将80改成8080或者别的端口号,重新运行一下Apache,这下应该能够启动了.

网站根目录设置不对解决方法


如果是网站根目录设置不对也会启动不了,Apache事还真多.有两处。在httpd.conf中查找 Apache/htdocs .修改即可,如K:/IDDCWEB/wwwroot。一般文件地址的“\”在Apache里要改成“/”。如果用的Apache2.24版本,要选择php中的php5apache2_2.dll加载.

下面附加自己修改httpd.conf的一些设置.供大家参考比较。

1.改网站根目录,有两处。查找 DocumentRoot 和 Directory.修改即可,如D:/wwwroot;主要是一般文件地址的“\”在Apache里要改成“/”。

2.首页设置,DirectoryIndex,添加相关首页项即可,如index.php ihdex.htm

3.查找LoadModule ssl,在下面加两行,第一行“LoadModule php5_module。D:/Server/php/php5apache2_2.dll”是指以module方式加载php,第二行“PHPIniDir "D:/php"”是指明php的配置文件php.ini的位置,是当然,其中的“D:/php”要改成你先前选择的php解压缩的目录。

4.查找AddType application/x-gzip .gz .tgz,在下面加入“AddType application/x-httpd-php .php”、“AddType application/x-httpd-php .html”两行,你也可以加入更多,实质就是添加可以执行php的文件类型,比如你再加上一行“AddType application/x-httpd-php .htm”,则.htm文件也可以执行php程序了,你甚至还可以添加上一行“AddType application/x-httpd-php .txt”,让普通的文本文件格式也能运行php程序。

5.搜索ServerName   修改网站名字后面的端口为前面改过的端口,如果没改过,省略.


D:\Program Files\Apache2.2\bin>httpd -t。[Wed Jun 22 14:34:49 2011] [warn] module php5_module is already loaded, skipping Syntax error on line 503 of D:/Program Files/Apache2.2/conf/httpd.conf:
PHPINIDir takes one argument, Directory containing the php.ini file。这个很简单,用记事本打开“D:/Program Files/Apache2.2/conf/httpd.conf”,你是否看到倒数几行有一个【PHPIniDir ""】。报错的原因是双引号里面缺少一个参数。

解决办法:
找到你的php安装目录,比如我的是D:/Program Files/PHP,你只需要在上面的双引号加入"D:/Program Files/PHP/php.ini"


    
[3]setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
    来源: 互联网  发布时间: 2013-11-30
代码如下:

<?php
   setcookie("username","bu",time()+3600);
   echo "aaaaa";
?>

运行有警告Warning: Cannot modify header information - headers already sent by 

下面是别人建议

方法一:
在PHP里Cookie的使用是有一些限制的。
1、使用setcookie必须在<html>标签之前
2、使用setcookie之前,不可以使用echo输入内容
3、直到网页被加载完后,cookie才会出现
4、setcookie必须放到任何资料输出浏览器前,才送出
.....
由于上面的限制,在使用setcookie()函数时,学会遇到 "Undefined index"、"Cannot modify header information - headers already sent by"…等问题,解决办法是在输出内容之前,产生cookie,可以在程序的最上方加入函数 ob_start();

ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。


方法二:
解决Warning: Cannot modify header information - headers already sent by ...... 前几天装了个php的大头贴系统测试,发现报错Warning: Cannot modify header information - headers already sent by ......
今天又装openads,还是出现这个问题。怒了。上网找了半天,有人说要在文件开头写上
ob_start();
失败。
后来打开 php.ini 然后把 output_buffering 设为 on 。重起appache,OK。看来这才是解决办法。

特别注意:(我就是看了这个才解决问题的)
如果使用utf-8编码,一定要去掉UTF-8中的BOM,这都是因为utf-8编码文件含有的bom原因,而php4,5都是不支持bom的。去掉bom,可以用Notepad++打开转换一下。(我就是看了这个才解决问题的)

自己解决办法

PHP4,5 都不支持utf-8编码文件中的BOM

如果文件包含BOM,设置cookie或者session 时都会报错.
如何能快速方便的去掉文件的BOM.
推荐使用 Notepad++ 软件,非常优秀的免费软件.
1.可以在设置-->首选项-->新建 默认新建UTF-8(无BOM) 

2.如果是在别处新建的php文件,在notpad++中打开如何将编码转变成 UTF-8(无BOM)
格式-->UTF-8(无BOM)  这时就可以转码了.

    
最新技术文章:
▪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