方法一,首先修改 httpd.conf 配置文件:
vi /etc/httpd/conf/httpd.conf
查找 Options Indexes FollowSymLinks,修改为 Options -Indexes。
方法二,在www 目录下的修改 .htaccess 配置文件:
加入 Options -Indexes
方法一,首先修改 httpd.conf 配置文件:
vi /etc/httpd/conf/httpd.conf
查找 Options Indexes FollowSymLinks,修改为 Options -Indexes。
方法二,在www 目录下的修改 .htaccess 配置文件:
加入 Options -Indexes
Windows下的Memcache安装:
1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached
2. 在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装
3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
4.下载php_memcache.dll,请自己查找对应的php版本的文件
5. 在C:\winnt\php.ini 加入一行 ‘extension=php_memcache.dll’
6.重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!
memcached的基本设置:
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
php_Memcache.dll PHP组件下载 http://www.php100.com/html/download/server/2010/0125/3858.html
Memcache Win32 1.2.1 下载 http://www.php100.com/html/download/server/2010/0125/3857.html
Memcache环境测试:
运行下面的php文件,如果有输出This is a test!,就表示环境搭建成功。开始领略Memcache的魅力把!
< ?php
$mem = new Memcache;
$mem->connect(”127.0.0.1″, 11211);
$mem->set(’key’, ‘This is a test!’, 0, 60);
$val = $mem->get(’key’);
echo $val;
?>
方法。
< ?php
//连接
$mem = new Memcache;
$mem->connect("192.168.0.200", 12000);
//具体端口可以通过phpinfo() 查看
//保存数据
$mem->set('key1', 'This is first value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val ."<br />";
//替换数据
$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br />";
//保存数组
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br />";
//删除数据
$mem->delete('key1');
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br />";
//清除所有数据
$mem->flush();
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br />";
//关闭连接
$mem->close();
?>
如果正常的话,浏览器将输出:
Get key1 value: This is first value
Get key1 value: This is replace value
Get key2 value: Array ( [0] => aaa [1] => bbb [2] => ccc [3] => ddd )
Get key1 value:
Get key2 value:
程序代码分析
初始化一个Memcache的对象:
$mem = new Memcache;
连接到我们的Memcache服务器端,第一个参数是服务器的IP地址,也可以是主机名,第二个参数是Memcache的开放的端口:
$mem->connect("192.168.0.200", 12000);
保存一个数据到Memcache服务器上,第一个参数是数据的key,用来定位一个数据,第二个参数是需要保存的数据内容,这里是一个字符串,第三
个参数是一个标记,一般设置为0或者MEMCACHE_COMPRESSED就行了,第四个参数是数据的有效期,就是说数据在这个时间内是有效的,如果过
去这个时间,那么会被Memcache服务器端清除掉这个数据,单位是秒,如果设置为0,则是永远有效,我们这里设置了60,就是一分钟有效时间:
$mem->set(‘key1‘, ‘This is first value’, 0, 60);
从Memcache服务器端获取一条数据,它只有一个参数,就是需要获取数据的key,我们这里是上一步设置的key1,现在获取这个数据后输出输出:
$val = $mem->get(’key1′);
echo "Get key1 value: " . $val;
现在是使用replace方法来替换掉上面key1的值,replace方法的参数跟set是一样的,不过第一个参数key1是必须是要替换数据内容的key,最后输出了:
$mem->replace(‘key1′, ‘This is replace value’, 0, 60);
$val = $mem->get(‘key1′);
echo "Get key1 value: " . $val;
同样的,Memcache也是可以保存数组的,下面是在Memcache上面保存了一个数组,然后获取回来并输出
$arr = array(‘aaa’,‘bbb’,‘ccc’, ‘ddd’);
$mem->set(‘key2′, $arr, 0, 60);
$val2 = $mem->get(‘key2′);
print_r($val2);
现在删除一个数据,使用delte接口,参数就是一个key,然后就能够把Memcache服务器这个key的数据删除,最后输出的时候没有结果
$mem->delete(‘key1′);
$val = $mem->get(‘key1′);
echo "Get key1 value: " . $val . "<br>";
最后我们把所有的保存在Memcache服务器上的数据都清除,会发现数据都没有了,最后输出key2的数据为空,最后关闭连接
$mem->flush();
$val2 = $mem->get(‘key2′);
echo "Get key2 value: ";
print_r($val2);
echo "<br>";
一、源码包准备
服务器端主要是安装memcache服务器端,目前的最新版本是 memcached-v1.4.4 。
下载:http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz
另外,Memcache用到了libevent这个库用于Socket的处理,所以还需要安装libevent,
libevent的最新版本是libevent-1.4.13-stable。(如果你的系统已经安装了libevent,可以不用安装)
官网:http://www.monkey.org/~provos/libevent/
下载:http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
准备Memcached的PHP扩展的源码安装包:
官网:http://pecl.php.net/get/memcache-2.2.5.tgz
Linux指令下载:
wget http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz
wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
wget http://pecl.php.net/get/memcache-2.2.5.tgz
1、先安装libevent
tar zxvf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
./configure –prefix=/usr
make
make install
2、测试libevent是否安装成功
ls -al /usr/lib | grep libevent
libevent-1.1a.so.1
libevent-1.1a.so.1.0.2
libevent-1.4.so.2
libevent-1.4.so.2.1.3
libevent.a
libevent_core-1.4.so.2
libevent_core-1.4.so.2.1.3
libevent_core.a
libevent_core.la
libevent_core.so
libevent_extra-1.4.so.2
libevent_extra-1.4.so.2.1.3
libevent_extra.a
libevent_extra.la
libevent_extra.so
libevent.la
libevent.so
版本不同,可能文件列表不同。
3、安装memcached,同时需要安装中指定libevent的安装位置
tar zxvf memcached-1.4.4.tar.gz
cd memcached-1.4.4
./configure –with-libevent=/usr
make && make install
安装完成后会把memcached 自动放到 /usr/local/bin/memcached
4、测试是否成功安装memcached
ls -al /usr/local/bin/mem*
-rwxr-xr-x 1 root root 201869 12-14 21:44 /usr/local/bin/memcached
5、安装Memcache的PHP扩展
①安装PHP的memcache扩展
tar vxzf memcache-2.2.5.tgz
cd memcache-2.2.5
/usr/local/webserver/php/bin/phpize
./configure –enable-memcache –with-php-config=/usr/local/webserver/php/bin/php-config –with-zlib-dir
make
make install
②上述安装完后会有类似这样的提示:
Installing shared extensions: /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/
③把php.ini中的extension_dir = “./”修改为
extension_dir = “/usr/local/php/lib/php/extensions/no-debug-non-zts-2007xxxx/”
④添加一行来载入memcache扩展:extension=memcache.so
三、memcached的基本设置1.启动Memcache的服务器端:
memcached -d -m 10 -u root -l 202.207.177.177 -p 11211 -c 256 -P /tmp/memcached.pid
参数说明:
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址202.207.177.177,
-p是设置Memcache监听的端口,我这里设置了11211,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,
2.如果要结束Memcache进程,执行:
kill `cat /tmp/memcached.pid`
也可以启动多个守护进程,不过端口不能重复。
3.检查Memcached是否启动
netstat -ant
tcp 0 0 202.207.177.177:11211 0.0.0.0:* LIST
11211端口已经打开,说明Memcached已正常启动。
4.重启CentOS
reboot
四、Memcache环境测试运行下面的php文件,如果有输出This is a test!,就表示环境搭建成功。开始你的Memcache的征途吧!
1
2
3
4
5
6
7
8
9
|
<?php
$mem= newMemcache;
$mem->connect("202.207.177.177", 11211);
$mem->set('key', 'This is a test!', 0, 60);
$val= $mem->get('key');
echo$val;
?>
|
对Memcached有疑问的朋友可以参考下列文章:
Linux下的Memcache安装:http://www.ccvita.com/257.html
Nginx 0.8.x + PHP 5.2.10(FastCGI)搭建胜过Apache十倍的Web服务器: http://blog.s135.com/nginx_php_v5/
转 http://blog.lixiphp.com/centos-linux-memcache-nginx-php-install/
------------------------------------------------------------------------------------
直接能通过YUM安装MEMCACHE
1、安装 EPEL Repo
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
2、安装 Memcache
yum -y install memcached
安装过程中可能会出现如下问题:
--> Missing Dependency: perl(Net::SSLeay) >= 1.33 is needed by package perl-AnyEvent-5.240-1.el5.rf.noarch (rpmforge)
Error: Missing Dependency: perl(Net::SSLeay) >= 1.33 is needed by package perl-AnyEvent-5.240-1.el5.rf.noarch (rpmforge)
You could try using --skip-broken to work around the problem
You could try running: package-cleanup --problems
package-cleanup --dupes
rpm -Va --nofiles --nodigest
The program package-cleanup is found in the yum-utils package.
这个问题是因为CentOS的 yum没有memcached需要的最新的 perl-Net-SSLeay 和 perl-IO-Socket-SSL包.
解决办法也很简单,删除旧的包,安装新的包。
查看旧版本的包
rpm -qa | grep perl-Net-SSLeay
rpm -qa | grep perl-IO-Socket-SSL
移除并安装新包
rpm-e perl-Net-SSLeay-1.30-4.fc6
rpm -e perl-IO-Socket-SSL-1.01-1.fc6
wget http://packages.sw.be/perl-Net-SSLeay/perl-Net-SSLeay-1.36-1.el5.rfx.i386.rpm
wget http://packages.sw.be/perl-Net-SSLeay/perl-Net-SSLeay-1.36-1.el5.rfx.x86_64.rpm
wget http://packages.sw.be/perl-IO-Socket-SSL/perl-IO-Socket-SSL-1.34-1.el5.rfx.noarch.rpm
rpm -i perl-Net-SSLeay-1.36-1.el5.rfx.x86_64.rpm
rpm -i perl-Net-SSLeay-1.36-1.el5.rfx.i386.rpm
rpm -i perl-IO-Socket-SSL-1.34-1.el5.rfx.noarch.rpm
然后再执行安装命令
yum -y install memcached
即可安装成功
3、设置为开机启动
chkconfig --level 2345 memcached on
4、启动和停止
/etc/init.d/memcached start|stop
客户端,直接将 php_memcache.so放到php的module中,然后在php.ini中载入即可
为安全起见,最好是修改一下memcache的端口,不要保留为默认的11211
可以用下面的方式改
memcached -d -m 10 -u root -l 202.207.177.177 -p 11211 -c 256 -P /tmp/memcached.pid
也可以
vi /etc/sysconfig/memcached 修改那里的端口即可<?php /** * PHP操作mssql数据库类,含分页类 * Enter description here ... * @author aboc 9986584 2011-04-09 * */ class DB_Handle{ var $ClassName = "DB_Handle"; var $Server; var $UserName; var $Password; var $Database; var $LinkID=0; var $QueryResult=""; var $LastInsertID = ""; //* private ignore=>ignore the error and continue, halt=>report the error and halt, report=>report the error and continue var $Halt_On_Error = "report"; var $Error = ""; var $ErrNo = 0; var $total = 0; var $page = 0; var $page_num = 10; var $page_size = 10; var $page_name = 'page'; //* remark: This is the db_mysql_class's structure * function: Set the server,username,password,database variable. function DB_Handle($server="",$username="",$password="",$database=""){ $this->Server = $server; $this->UserName = $username; $this->Password = $password; $this->Database = $database; } //* function: Connect database and select database * success: retun 1 * failed: return 0 function connect(){ $this->LinkID = @mssql_pconnect($this->Server,$this->UserName,$this->Password); if(!$this->LinkID){ $this->halt("mssql_pconnect($this->Server,$this->UserName,$this->Password): Failed"); return 0; } if(!@mssql_select_db($this->Database)){ $this->halt("mssql_select_db($this->Database) Failed."); return 0; } return 1; } //* function: Check the database, if exist then select * exist: return 1 * not exist: return 0 function selectDatabase(){ if(@mssql_select_db($this->Database)) return 1; else return 0; } //* function: Execute SQL instruction * success: return SQL Result. * failed: return 0; function execQuery($sql=""){ if($this->LinkID == 0){ $this->halt("Execute SQL Failed: Hava not valid database connect."); return 0; } ob_start(); $this->QueryResult = mssql_query($sql,$this->LinkID); $error = ob_get_contents(); ob_end_clean(); if($error){ $this->halt("Execute SQL: mssql_query($sql,$this->LinkID) failed."); return 0; } $reg = "#insert into#"; if(preg_match($reg,$sql)){ $sql = "select @@IDENTITY as id"; $res = mssql_query($sql,$this->LinkID); $this->LastInsertID = mssql_result($res,0,id); } return $this->QueryResult; } //* function: Get the query result's row number//* success: return the row fo the Result//* failed: return 0 function getTotalRowNum($result=""){ if($result != "") $this->QueryResult = $result; $row = @mssql_num_rows($this->QueryResult); if($row >= 0) return $row; $this->halt("Get a row of result Failed: Result $result is invalid."); return 0; } //* function: Get the last insert record's id //* success: return id //* failed: return 0 function lastInsertID(){ return $this->LastInsertID; } //* function: Get a field's value * success: return value of the field * failed: return 0 function getField($result="",$row=0,$field=0){ if($result != "") $this->QueryResult = $result; $fieldvalue = @mssql_result($this->QueryResult,$row,$field); if($fieldvalue != "") return $fieldvalue; $this->halt("Get field: mssql_result($this->QueryResult,$row,$field) failed."); return 0; //Here should have error handle } //* function: Get next record * success: return a array of the record's value * failed: return 0 function nextRecord($result=""){ if($result != "") $this->QueryResult = $result; $record = @mssql_fetch_array($this->QueryResult); if(is_array($record)){ foreach ($record as $key=>$row) $record[$key] = trim($row); return $record; } //$this->halt("Get the next record Failed: the Result $result is invalid."); return 0; } //* function: Free the Query Result * success return 1 * failed: return 0 function freeResult($result=""){ if($result != "") $this->QueryResult = $result; return @mssql_free_result($this->QueryResult); } //* function: Set the Halt_On_Error's state * success: return 1 * failed: return 0 function setHaltOnError($state="ignore"){ if(!($state == "ignore" || $state == "report" || $state == "halt")){ $this->halt("Set the Halt_On_Error Fail: There is no state value $state"); return 0; } $this->Halt_On_Error = $state; return 1; } //* function: Get the Halt_On_Error's state function getHaltOnError(){ return $this->Halt_On_Error; } //* function: Get the class's name function toString(){ return $this->ClassName; } //* function: Error handle function halt($msg){ $this->Error = @mysql_error($this->LinkID); $this->ErrNo = @mysql_errno($this->LinkID); if ($this->Halt_On_Error == "ignore") return; $this->makeMsg($msg); if ($this->Halt_On_Error == "halt") die("Session halted"); } //* function: Make error information and print function makeMsg($msg){ printf("Database error: %s \n", $msg); printf("MySQL Error: %s (%s) \n",$this->ErrNo,$this->Error); } /** * 以下为分页类 */ private function getQuery(){ $query = ''; if( isset($_GET) && is_array($_GET)){ foreach ($_GET as $key=>$value){ if ($key == 'page')continue; $query .= !empty($query)?'&'.$key.'='.$value:$key.'='.$value; } } $query .= empty($query)?'':'&'; return $this->getFilename().$query; } /** * 获取当前的url文件名并带上? */ private function getFilename() { //$filename = str_replace($_SERVER['QUERY_STRING'],'',basename($_SERVER["REQUEST_URI"])); $filename = str_replace('?'.$_SERVER['QUERY_STRING'],'',basename($_SERVER["REQUEST_URI"])).'?'; return $filename; } /** * 返回带分页名的连接字符 */ private function returnPageLink( $page ){ return $this->getQuery().$this->page_name.'='.$page; } /** * 下一页链接 */ function nextPageLink(){ if( $this->page != $this->page_num ) return $this->returnPageLink($this->page+1); else return '#'; } function getListData($sql,$num=10){ $this->execQuery($sql); $this->page_num = $this->getTotalRowNum(); if (!$this->page_num || !$num )return array(); $this->page_size = $num; $this->page = isset($_GET[$this->page_name])?intval($_GET[$this->page_name]):1; $pageTotal = ceil($this->page_num/$num); if ($this->page < 0)$this->page = 0; if ($this->page > $pageTotal) $this->page = $pageTotal; $list = array(); if (mssql_data_seek($this->QueryResult, ($this->page-1)*$this->page_size)){ for ($i=0;$i<$num;$i++){ $list[] = $this->nextRecord(); } } return $list; } /** * 输出中文分页链接 上一页,下一页 * * @return unknown */ function pagelist( $total='总共',$dataname='条',$now='当前',$page='页',$first='第一页',$last='尾页',$prev='上一页',$next='下一页' ){ $total='<span>'.$total.$this->page_size.$dataname.' '.$now.($this->page).'/'.($this->page_num).$page.'</span>'; $startpage='<a href="'.$this->returnPageLink(1).'">'.$first.'</a>'; $endpage='<a href="'.$this->returnPageLink($this->page_num).'">'.$last.'</a>'; if($this->page == 1){ $prepage='<span>'.$prev.'</span>'; }else{ $prepage='<a href="'.$this->returnPageLink($this->page-1).'">'.$prev.'</a>'; } if($this->page==$this->page_num){ $nextpage='<span>'.$next.'</span>'; }else{ $nextpage='<a href="'.$this->returnPageLink($this->page+1).'">'.$next.'</a>'; } if($this->page_size == 0)return ''; return $total.' '.$startpage.' '.$prepage.' '.$nextpage.' '.$endpage; } /** * 输出下拉框的列表 * */ function select() { $select = '<select name="pageselect" id="pageselect" onchange="window.location=\''.$this->getQuery().$this->page_name.'=\'+pageselect.value">'; $totalnum = $this->page_num; for($i=1;$i<=$totalnum;$i++) { if($this->page == $i){ $str = ' selected="selected"'; } else { $str = ''; } $select .= '<option value="'.$i.'"'.$str.'>'.$i.'</option>'; } $select .= '</select>'; if($this->page_size == 0)$select = ''; return $select; } /** * 输入页数到多少页 * */ function gotoPage($buttonname='到'){ $string = '<input type="text" size="3" name="dm_pagenum"><input type="button" value="'.$buttonname.'" onclick="window.location=\''.$this->getQuery().$this->page_name.'=\'+dm_pagenum.value"> '; if($this->page_size == 0)$string = ''; return $string; } function pageListBaidu($first='首页',$pre_page='上一页',$next_page='下一页',$last='尾页' ,$shownum=6) { if($this->page_num == 1) return; $pagelink = ''; if($this->page != 1) { $pagelink .= '[<a href="'.$this->returnPageLink(1).'">'.$first.'</a>] '; $pagelink .= '[<a href="'.$this->returnPageLink($this->page-1).'">'.$pre_page.'</a>] '; } for ($i=$shownum;$i>=1;$i--) { $tmp_page = $this->page - $i; if( $tmp_page >= 1 ) { $pagelink .= '[<a href="'.$this->returnPageLink($tmp_page).'">'.$tmp_page.'</a>] '; } } $pagelink .= '<span>'.$this->page.'</span>'; for ($i=1;$i<=$shownum;$i++) { $tmp_page = $this->page + $i; if( $tmp_page <= $this->page_num ) { $pagelink .= '[<a href="'.$this->returnPageLink($tmp_page).'">'.$tmp_page.'</a>] '; } } if( $this->page != $this->page_num ){ $pagelink .= '[<a href="'.$this->returnPageLink($this->page+1).'">'.$next_page.'</a>] '; $pagelink .= '[<a href="'.$this->returnPageLink($this->page_num).'">'.$last.'</a>]'; } if($this->num == 0)$pagelink = ''; return $pagelink; } }
一,getimagesize不知道为什么在本地会很慢,注释掉就可以了
二,关于这个用网上说的方法吧
php环境兼容性问题--
内容编码错误
无法显示您尝试查看的页面,因为它使用了无效或者不支持的压缩格式。
请联系网站的所有者以告知此问题。
以前也遇到过同样的问题,记得是PHP代码ob_start('ob_gzhandler')导致的,导致的原因有两种,
1. 服务器不支持这种压缩格式,可使用function_exists('ob_gzhandler')判断,解决方法 ob_start('ob_gzhandler')改为ob_start();
2.
使用ob_start('ob_gzhandler')时候前面已经有内容输出,检查前面内容以及require
include调用文件的内容。若无法找到可以在调用其它文件前使用ob_start(),调用之后使用 ob_end_clean ()
来清除输出的内容;
在 调用ob_start();前加入 ob_end_clean ()
还有一点需要注意的是,PHP5.30版本,默认不再支持<?=$username;?>这样的语法,输出变量需使用&
lt;?php echo $username;?>语法才可以。你可以通过将 php.ini 中的 short_open_tag 设置为
On,这样就可以兼容原来的语法。
在对ubuntu系统进行相关设置后,就可以进行各种环境的搭建,这里介绍apache+mysql+php环境的搭建:
1、安装Mysql
aptitude install mysql-server mysql-client 安装过程中,要输入MySQL的root用户密码,
New password for the MySQL "root" user: <-- yourrootsqlpassword
Repeat password for the MySQL "root" user: <-- yourrootsqlpassword
数据文件放在: /var/lib/mysql下
2、安装Apache
代码:aptitude install apache2
安装完后,在浏览器中访问 http://192.168.0.100 看到如下图所示的页面,就说话安装成功了:
Ubuntu系统中Apache的默认文档根目录为
/var/www,配置文件位于/etc/apache2/apache2.conf。其他的一些额外配置文件存放在/etc/apache2的子目录
里,如 /etc/apache2/mods-enabled (Apache模块配置文件),/etc/apache2/sites-enabled
(虚拟主机配置文件),还有 /etc/apache2/conf.d
3、安装Php5
aptitude install php5 libapache2-mod-php5
安装完成后,重新启动apache2服务:
代码: /etc/init.d/apache2 restart
由于默认Web站点的根目录位于 /var/www,我们就在该根目录新建一名为 info.php
的php程序文件,并从浏览器里访问它,以测试PHP5是否成功安装。该测试php文件中使用 phpinfo()
函数获得服务器中安装的PHP软件包详情,比如PHP的版本、所支持的组件等等。
代码: vi /var/www/info.php
<?php phpinfo(); ?>
文件编辑好后,保存退出,在浏览器里浏览该文件(文中使用http://192.168.0.100/info.php
4、为PHP5安装MySQL支持
为了让PHP支持MySQL,我们必须安装php5-mysql软件包。同时,还可以为php安装一些可选的支持模块,如mcrypt, memcache, gd, pear, imagick等等。使用下面的命令可以搜索一下php5相关的模块:
aptitude search php5
选择你想安装的模块,并安装它们,本文列出了一些常用的php5软件包并安装,执行下面的命令:
aptitude install php5-mysql php5-curl php5-gd php5-idn php-pear
php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming
php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy
php5-xmlrpc php5-xsl php5-json
安装完成后,重启apache2服务: /etc/init.d/apache2 restart
这时候,刷新浏览器或者重新打开 http://192.168.0.100/info.php 就可以看到刚刚安装的php功能了,注意看看mysql和mysqli相关的信息
这样就完成了搭建。。。
by Aboc
如果没有aptitude 则可以用apt-get
# /etc/init.d/httpd start
Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
[FAILED]
1.netstat -lnp|grep 80
tcp 0 0 192.168.180.68:61027 0.0.0.0:* LISTEN 6289/oproxyd
tcp 0 0 :::80 :::* LISTEN 846/httpd
tcp 0 0 ::ffff:192.168.180.68:7001 :::* LISTEN 32015/java
找到pid 846
#ps 846
查看
#kill -9 846
杀掉
#./apachectl start
启动成功
*****************************************************************************
处理办法:
# ps -aux | grep http
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
root 12079 0.0 0.0 61164 720 pts/1 S+ 16:06 0:00 grep http
# ps -aux | grep apache
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
apache 10820 0.0 0.0 2044 600 ? Ss Jan01 0:04 bash
root 12081 0.0 0.0 61160 716 pts/1 S+ 16:06 0:00 grep apache
# kill -9 10820
# /etc/init.d/httpd start
Starting httpd: [ OK ]
# /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
**********************************************************
如果默认编码是gb2312的话,会出现乱码.经百度告知原来是http.conf强制使用了utf-8,我们只要把它改为关闭就可以了
AddDefaultCharset UTF-8 改为 AddDefaultCharset OFF
另外:有另外一种方法,但是我感觉好像没有奏效:http://hi.baidu.com/qrpeng/blog/item/e76164085e2b9e9e0a7b82fd.html
以下是引用他的
修改http.conf中的AddDefaultCharset为AddDefaultCharset off,关闭apache默认编码,这样php的应用和tomcat下的应用都分别采用各自的编码,apache不会强行修改这些应用返回的 response的http头中的charset。如此一来就ok了。
json的install。
Google到一些文档都是下载后进行编译的,显得比较费事。还好有大牛写出了比较简单的方法,我转载一下
yum update "*php*"
pecl install json
cd /etc/php.d/
echo “extension=json.so” >> json.ini
service httpd restart
启动mysql控制台: mysql
mysql>; USE mysql;
mysql>; UPDATE user SET Password=PASSWORD('newpassword') WHERE user='root';
mysql>; FLUSH PRIVILEGES;
2.2.3 允许远程登录
mysql -u root -p
Enter Password: <your new password>
mysql>GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
完成后就能用mysql-front远程管理mysql了。
2.2.4 设为开机启动
chkconfig mysqld on
3. 安装php
yum install php php-mysql php-common php-gd php-mbstring php-mcrypt php-devel php-xml
/etc/init.d/httpd start
/升级默认的php5.1到5.2
vi gedit /etc/yum.repos.d/utterramblings.repo
在打开的文件中加入以下内容:
[utterramblings]
name=Jason’s Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
保存
yum update php
1、下载文件:
http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz (32位)
http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz (64位)
2、解压
解压后把ZendOptimizer-3.3.9-linux-glibc23-x86_64/data/5_2_x_comp目录下的ZendOptimizer.so拷贝到某一个目录,比如/usr/local/Zend/lib/
Zend optimizer 3.3.9有一些新的改动,不需要安装了,直接在php.ini文件里面引用.so文件即可:
3、修改/etc/php.ini文件
找到:zend.ze1_compatibility_mode = Off
修改为:zend.ze1_compatibility_mode = On
在末尾加上以下文字:
[Zend Optimizer]
zend_optimizer.optimization_level=1
zend_extension="/usr/local/Zend/lib/ZendOptimizer.so"
4、重启httpd服务,通过php -v 可以看效果。
安装eaccelerator
直接yum install php-eaccelerator
如果找不到,线 yum search eaccelerator
虚拟主机安装时注意,如果出现多个域名都指向同一个目录的情况
NameVirtualHost 127.0.0.1:80 #这句一定要和 <VirtualHost 127.0.0.1:80>配合才可以。
<VirtualHost 127.0.0.1:80>
DocumentRoot /var/www/html
ServerName t.dagongz.com
<Directory "/var/www/html">
allow from all
Options +Indexes
</Directory>
</VirtualHost>
<VirtualHost 127.0.0.1:80>
DocumentRoot /var/www/html/test/
ServerName test.dagongz.com
<Directory "/var/www/html/test/">
allow from all
Options +Indexes
</Directory>
</VirtualHost>
开启缓存Expires模块要有
ExpiresActive on
ExpiresDefault "access plus 86400 second"
卸载Mysql
[root@localhost ~]# rpm -qa|grep mysql
mod_auth_mysql-2.6.1-2.2
php-mysql-4.3.9-3.15
mysql-devel-4.1.20-1.RHEL4.1
mysql-4.1.20-1.RHEL4.1
mysqlclient10-3.23.58-4.RHEL4.1
libdbi-dbd-mysql-0.6.5-10.RHEL4.1
说明:rpm –qa | grep mysql 命令是为了把mysql相关的包都列出来,我上面的例子是Linux
AS4默认安装mysql的rpm软件包列表,
如果是别的Linux版本列出来的列表有可能会不一样,不过不用担心,不管是什么,卸载都从最下面的一个包开始,直到卸载掉第一个为止。
说明:rpm –e
是卸载rpm包的命令,后面是包名称,最后的版本号是不用打的,比如我们下一步卸载mysqlclient10-3.23.58-4.RHEL4.1包
方法如下:
rpm –e mysqlclient
卸载Apache
[root@localhost ~]# rpm -qa|grep httpd
httpd-manual-2.0.52-25.ent
system-config-httpd-1.3.1-1
httpd-2.0.52-25.ent
httpd-suexec-2.0.52-25.ent
说明:方法跟卸载Mysql一样,不用说了吧
卸载PHP
[root@localhost ~]# rpm -qa|grep php
php-odbc-4.3.9-3.15
php-4.3.9-3.15
php-mysql-4.3.9-3.15
php-pear-4.3.9-3.15
php-ldap-4.3.9-3.15
php-pgsql-4.3.9-3.15
说明:方法跟卸载Mysql一样
注意:卸载的时候如果卸载不掉,系统一般会提示包的依赖关系,并且列出依赖的包的名称,先卸载提示依赖的包就可以了。
如果实在实在有卸载不掉的包,可以加—nodeps这个参数来卸载,比如我们卸载php-4.3.9-3.15,实在卸不掉了。
就用:
[root@localhost ~]# rpm -e php-4.3.9-3.15 --nodeps
之前有讲过公司新买的服务器使用的是CentOS 5.5,部署好Tomcat之后却发现输入114.80.*.*:8080(即ip:8080)却无法显示Tomcat默认的首页。因为以前部署在Win Server的VPS,Linux开发时也只用到localhost,所以就有点头大。
好吧,G一下网上有说是防火墙的问题,敲入
/etc/init.d/iptables stop
关闭之后再次查看114.80.*.*:8080(即ip:8080)发现果然成功。但是貌似安全隐患大大增加……使用
/etc/init.d/iptables status
查看防火墙信息,可以看到打开的端口。那么我们把需要使用的端口打开应该是一个比较可行的办法了,命令如下:
/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT #8080为指定端口
/etc/init.d/iptables restart #重启防火墙以便改动生效,当然如果不觉得麻烦也可重启系统(命令:reboot)
/etc/rc.d/init.d/iptables save #将更改进行保存
当然了,还有另外直接在/etc/sysconfig/iptables中增加一行:
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 8080 -j ACCEPT
永久关闭防火墙
chkconfig –level 35 iptables off #此方法源自网络,未实验,安全考虑拒绝使用此方法
使用Root用户运行命令:
fdisk /dev/hda
输入n增加分区
输入p类型设置为:主分区
输入3分区编号设置为3
回车 为默认大小
回车 为默认 大小
再
输入t 设置分区类型
输入3 3号分区
输入8e 设置为LVM
输入 v 检查分区表
输入w 写入分区表
输入q 退回fdisk
输入 reboot 重启
重启后,
使用Root用户运行命令:
mkfs.ext3 /dev/hda3 建立文件系统
输入 mkdir /newhd 来建立目录/newhd
将目录挂上到系统中
mount /dev/hda3 /newhd
参数查看磁盘剩余空间信息,命令格式: df -hl
就可以看到有/newhd有可用空间了
如果以后要自动挂载这个分区,您可以修改/etc/fstab
在这个文件最后一行加上
/dev/hda3 /newhd ext3 defaults 1 1
保存后,重启动就有效了.