解决php中Cannot send session cache limiter 的问题的方法(转载)

Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at E:\php\code\admin.php:1) in E:\php\code\logolist\adminlogo.php on line 2

上网搜了一下,有人说是因为在session_start(); 语句之前有其他的html代码,但是我的session_start(); 已经在做前面了。
还有的说是因为没有设置session 保存路径,需要修改php.ini中的session.save_path = “C:/phpsession” [后边的路径自己设置,并且要保证存在。php.ini 文件一般应位于系统盘/Windows 目录下面]

但是我做如上设置之后还是会有这个提示。后来经过反复测试,终于解决问题。
解决办法:
修改php.ini中的session.auto_start = 0 为 session.auto_start = 1

 

原文出处:http://www.jb51.net/article/9724.htm

linux系统xampp虚拟主机绑定多个域名的方法

依次打开lampp——etc——extra——httpd-vhosts.conf

找到下图这一部分

<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “/opt/lampp/docs/wxfx”
ServerName xm479.com
ServerAlias www.xm479.com www.djmy.net
ErrorLog “logs/xm479.com-error_log”
CustomLog “logs/xm479.com-access_log” common
</VirtualHost>

ServerName绑定的是主域名

ServerAlias绑定的是备用域名,在这里可以绑定多个域名,不同域名之间用空格分开即可

Linux下的XAMPP多个虚拟主机及ftp配置

xampp安装好之后就只有一个默认站点及一个默认nobody的ftp账户,这显然不符合我们平时的需求了,那么下面就来讲一下如何设置并管理多个虚拟主机及ftp账户了,至于xampp的安装不在此讨论范围,读者可自行参阅官网的相关说明。

1、首先讲一下ftp账户的配置:

xampp采用的是proftpd服务端,这个不像我们Win环境下常用的Serv-U,用户帐户不是在服务端工具里面进行配置,而是在linux系统帐户里面配置的。因此我们可以使用命令:

groupadd ftpusers

先在系统中创建一个名称为ftpusers的用户组,这里的名称可以随便设置,主要是为了区分ftp帐户与系统其他类型的帐户所以我这里就命名为ftpusers,然后在这个组里面添加一个用户:

useradd -d /opt/lampp/www/site1 -g ftpusers -s /sbin/nologin site1ftp

第一个参数-d表示用户home目录,其中/opt/lampp/www/这个路径必须是存在的,而site1则是在该命令执行时自动创建的。第二 个参数-g表示此用户隶属于哪个用户组,第三个参数-s表示此用户的shell环境,为安全起见我们应该设置为一个无权限的路径。最后一个参数才是此帐户 的登录名称,我这里是site1ftp。

创建好之后我们就要为该帐户设置一个密码了:

passwd site1ftp

执行该命令后按提示输入两次密码即可完成帐户site1ftp的密码设置了。

接下来我们设置一下帐户home目录的权限:

chmod -R 777 /opt/lampp/www/site1

至此,ftp帐户的添加算是完成了,顺便提示一下,删除帐户的命令是userdel,修改帐户的命令是usermod,存储帐户的文件路径为/etc/passwd。

另外,为安全起见,我们应该在proftpd的服务配置文件(一般路径是/opt/lampp/etc/proftpd.conf)中修改一下 DefaultRoot为为~(键盘 左上角的那个符号),这样表示ftp用户限制在自己的权限目录内

对了,还差一个步骤,应该在proftpd配置文件中对ftp目录添加可重写的权限,如下:

<Directory /opt/lampp/www/*>

AllowOverwrite  on

</Directory>

否则会出现ftp上传文件时无法覆盖同名文件的问题。

2、然后我们再讲一下虚拟主机的配置

先执行:

cat /opt/lampp/etc/httpd.conf

查看一下xampp的apache配置文件,我们发现其中有一行:

#Include etc/extra/httpd-vhosts.conf

看来,xampp为我们准备了一个专用于配置虚拟主机的文件了,去掉#号以删除其注释,然后编辑/opt/lampp/etc/extra /httpd-vhosts.conf文件,此文件中xampp为我们创建了两个虚拟主机的示例,我们把这两个示例注释掉,然后添加我们自己需要的虚拟主 机,例如:

<VirtualHost *:80>

DocumentRoot /opt/lampp/www/site1

ServerName blog.ewebe.net

</VirtualHost>

DocumentRoot表示虚拟主机对应的路径,即网站目录,ServerName表示虚拟主机的访问地址,类似IIS中的主机头值。

至此,虚拟主机的设置也算是完成了。

最后我们需要在apache配置文件/opt/lampp/etc/httpd.conf中添加一下网站目录的访问权限。

<Directory />
省略….
</Directory>

改成<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
allow from all
</Directory>

<Directory “/opt/lampp/www/site1”>

Options Indexes FollowSymLinks

AllowOverride All

Order allow,deny

Allow from all

</Directory>

这里可以将目录路径/opt/lampp/www/site1改为/opt/lampp/www,为以后建立更多的虚拟主机如site2、site3……等等做准备。

linux安装xampp集成包后不能用ip访问的解决方案

xampp是一款初学者使用的集成的apache mysql与php配置安装包了,我们可以利用xampp来快速安装配置php环境,但是安装完后大家习惯用外网ip地址访问下,遗憾的是打不开,一般显示如下信息:

20140829212920290

看一下路径,我们没有动过默认的放项目的文件夹,所以默认打开index.php,然后转跳到了xampp文件夹下面了,进入xampp的web管理界面了。这个是由于服务器设置了xampp不允许远程访问。

1、编辑httpd-xampp.conf这个文件设置一下

vi /opt/lampp/etc/extra/httpd-xampp.conf
找到

LocationMatch “^/(?i:(?:xampp|security|licenses|phpmyadmin|webalizer|server-status|server-info))”
Require local
ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
改成

LocationMatch “^/(?i:(?:xampp|security|licenses|phpmyadmin|webalizer|server-status|server-info))”
Require  all granted
ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
也就是将   Require local  改成  Require  all granted 。保存文件,使用命令  /opt/lampp/lampp restart 重启xampp即可。

phpmyadmin地址:   http://你的域名或ip/phpmyadmin 【要输入phpmyadmin的用户名和密码,用户名是pma,密码就是刚刚设置的】
ftp地址为你的ip, 用户名:daemon ,端口21

 

Warning: date(): It is not safe to rely on the system’s timezone settings.(转载)

PHP调试的时候出现了警告:

It is not safe to rely on the system解决方法,其实就是时区设置不正确造成的,本文提供了3种方法来解决这个问题。

实际上,从PHP 5.1.0开始当对使用date()等函数时,如果timezone设置不正确,在每一次调用时间函数时,都会产生E_NOTICE 或者 E_WARNING 信息,而又在php中,date.timezone这个选项,默认情况下是关闭的,无论用什么php命令都是格林威治标准时间,但是PHP5.3中如果没有设置部分时间类函数也会强行抛出了这个错误的。
PS:现在由于大部分人使用VPS/云主机,需要自己配置的环境的就更加会容易出现这个情况。
建议:不熟悉PHP环境还是用比较成熟的一键安装包吧。

方法1:

(最好的方法)在php.ini里加上找到date.timezone项,设置date.timezone = “Asia/Shanghai”,重启环境就ok了。

方法2:

在需要用到这些时间函数的时候,在页面添加date_default_timezone_set(“PRC”);

方法3:

在页头加上设置时区ini_set(‘date.timezone’,’Asia/Shanghai’);

错误代码:
Warning: date(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Chongqing’ for ‘CST/8.0/no DST’ instead

Warning: strtotime(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Chongqing’ for ‘CST/8.0/no DST’ instead

Warning: date_default_timezone_get(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Chongqing’ for ‘CST/8.0/no DST’ instead in <b>/home/ftp/n/nimaboke/include/lib/function.base.php

php5魔术函数、魔术常量(转载)

魔术函数

1。__construct()
实例化对象时被调用,
当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。

2。__destruct()
当删除一个对象或对象操作终止时被调用。

3。__call()
对象调用某个方法,
若方法存在,则直接调用;
若不存在,则会去调用__call函数。

4。__get()
读取一个对象的属性时,
若属性存在,则直接返回属性值;
若不存在,则会调用__get函数。

5。__set()
设置一个对象的属性时,
若属性存在,则直接赋值;
若不存在,则会调用__set函数。

6。__toString()
打印一个对象的时被调用。如echo $obj;或print $obj;

7。__clone()
克隆对象时被调用。如:$t=new Test();$t1=clone $t;

8。__sleep()
serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。

9。__wakeup()
unserialize时被调用,做些对象的初始化工作。

10。__isset()
检测一个对象的属性是否存在时被调用。如:isset($c->name)。

11。__unset()
unset一个对象的属性时被调用。如:unset($c->name)。

12。__set_state()
调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。

13。__autoload()
实例化一个对象时,如果对应的类不存在,则该方法被调用。

魔术常量

1。__LINE__
返回文件中的当前行号。

2。__FILE__
返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。

3。__FUNCTION__
返回函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

4。__CLASS__
返回类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

5。__METHOD__
返回类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

原文链接:http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2009/0721/3088.html

如何查看/修改Linux时区和时间(转载)

查看/修改Linux时区和时间

 

一、时区

1. 查看当前时区

date -R

2. 修改设置时区

方法(1)

tzselect

方法(2) 仅限于RedHat Linux 和 CentOS

timeconfig

方法(3) 适用于Debian

dpkg-reconfigure tzdata

3. 复制相应的时区文件,替换系统时区文件;或者创建链接文件

cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime

在中国可以使用:

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

二、时间

1、查看时间和日期

 

date

 

2、设置时间和日期

将系统日期设定成1996年6月10日的命令

 

date -s 06/22/96

将系统时间设定成下午1点52分0秒的命令

date -s 13:52:00

 

3. 将当前时间和日期写入BIOS,避免重启后失效

hwclock -w

原文出处:http://blog.csdn.net/colincjl/article/details/6133036

PHP获取站点根目录常用的方法(转载)

将下面的代码放在网站根目录下的一个文件中,以便在其它文件中引用。

路径方式:

define(‘BASE_PATH’,str_replace(‘\\’,’/’,realpath(dirname(__FILE__).’/’)).”/”);

echo BASE_PATH;

 

输出结果:E:/wwwroot/

url方式:

 

$PHP_SELF=$_SERVER[‘PHP_SELF’];

$url=’http://’.$_SERVER[‘HTTP_HOST’].substr($PHP_SELF,0,strrpos($PHP_SELF,’/’)+1);

echo $url;

 

输出结果:http://localhost/
其它的资料整理:

PHP取得站点根目录

 

echo $_SERVER[‘HTTP_HOST’];//当前请求的 Host: 头部的内容 即域名信信息

echo $_SERVER[‘PHP_SELF’];//当前正在执行脚本的文件相对网站根目录地址,就算该文件被其他文件引用也可以正确得到地址

 

echo $_SERVER[‘SCRIPT_NAME’];//当前正在执行脚本的文件相对网站根目录地址,但当该文件被其他文件引用时,只显示引用文件的相对地址,不显示该被引用脚本的相对地址。

 

echo $_SERVER[‘DOCUMENT_ROOT’];//网站相对服务器地址即网站的绝对路径名 #当前运行脚本所在的文档根目录。在服务器配置文件中定义

 

echo $_SERVER[‘SCRIPT_FILENAME’];//当前执行脚本的绝对路径名。

 

方法一:

 

今天讲了大致的站点目录结构,其中说到了怎样取得站点根目录,好多同学不是很理解,下面一步一步道来:

 

我的站点目录据对路径:D:\www\message2011,测试文件路径:D:\www\message2011\include\config.inc.php

 

在根目录下新建一个文件,也可以隔一层目录创建,就以上面为例,我要在config.inc.php中取得站点的根目录。

 

1、取得当前文件的路径:用魔术常量__FILE__。这里的路径包含了文件名,结果如下:

 

D:\www\message2011\include\config.inc.php

 

2、去掉上面路径的文件名,得到纯路径:dirname(__FILE__),结果如下:

 

D:\www\message2011\include

 

3、返回一层目录到根目录:realpath(dirname(__FILE__).’/../’),结果如下:

 

D:\www\message2011

 

4、把向左的”\“转化成向右的”/“:str_replace( ‘\\’ , ‘/’ , realpath(dirname(__FILE__).’/../’)),结果如下:

 

D:/www/message2011

 

到这就是我们想要的站点根目录了,可以根据需求设定第三步返回目录层数,比如:返回2层就是 /../../,那么就会得到 D:\www\,以此类推。

 

方法二:

 

在global.inc   里定义根目录

 

define(“APP_ROOT”,dirname(__FILE__));

 

在任何PHP文件中可以引用该常量

 

require_once(APP_ROOT.”/inc/head.php”);

 

 

方法三:

 

<?php

 

$PHP_SELF=$_SERVER[‘PHP_SELF’] ? $_SERVER[‘PHP_SELF’] : $_SERVER[‘SCRIPT_NAME’];

 

$url=’http://’.$_SERVER[‘HTTP_HOST’].substr($PHP_SELF,0,strrpos($PHP_SELF, ‘/’)+1);

 

echo $url;

 

方法四:

 

$basepath=$_SERVER[‘PHP_SELF’];

 

$basepath=substr($basepath,0,strpos($basepath,”文件夹名称”));

 

echo $basepath;

 

如:你把文件保存为a.php并路径为:/wjj/wjj1/wjj2/a.php

 

上面的例子就写成:

 

$basepath=$_SERVER[‘PHP_SELF’];

 

$basepath=substr($basepath,0,strpos($basepath,”wjj1″));

 

echo $basepath;

 

方法五:

 

$basepath=$_SERVER[‘PHP_SELF’];

 

preg_match(“/(\/)?([^\/]+)/”,$basepath,$wjm);

 

echo $wjm[0];

 

注意,第二种方法我不太会,如文件路径为:/wjj/wjj1/wjj2/a.php,它只返回 /wjj 后面的/自己加!

 

?>