按月份归档:5 月 2013

php数组排序函数

如果你已经使用了一段时间PHP的话,那么,你应该已经对它的数组比较熟悉了——这种数据结构允许你在单个变量中存储多个值,并且可以把它们作为一个集合进行操作。

经常,开发人员发现在PHP中使用这种数据结构对值或者数组元素进行排序非常有用。PHP提供了一些适合多种数组的排序函数,这些函数允许你在数组内部对元素进行排列,也允许用很多不同的方法对它们进行重新排序。在这篇文章中我们将讨论该排序中最重要的几个函数。

简单排序

首先,让我们来看看最简单的情况:将一个数组元素从低到高进行简单排序,这个函数既可以按数字大小排列也可以按字母顺序排列。PHP的sort()函数实现了这个功能,如Listing A所示:

Listing A

<?php

? $data = array(5,8,1,7,2);

? sort($data);

? print_r($data);

? ?>

输出结果如下所示:

Array ([0] => 1

[1] => 2

[2] => 5

[3] => 7

[4] => 8

)

也能使用rsort()函数进行排序,它的结果与前面所使用的sort()简单排序结果相反。Rsort()函数对数组元素进行从高到低的倒排,同样可以按数字大小排列也可以按字母顺序排列。Listing B给我们展示了它的一个例子:

Listing B

<?php $data = array(5,8,1,7,2);rsort($data); print_r($data);

?>

它的输出结果如下:

Array ([0] => 8

[1] => 7

[2] => 5

[3] => 2

[4] => 1

)

根据关键字排序

当我们使用数组的时候,经常根据关键字对数组重新排序,从高到低。Ksort()函数就是根据关键字进行排序的函数,同时,它在排序的过程中会保持关键字的相关性。Listing C就是一个例子:

Listing C

<?php $data = array(“US” => “United States”, “IN” => “India”, “DE” => “Germany”, “ES” => “Spain”);ksort($data); print_r($data);

?>

它的输出结果如下:

Array ([DE] => Germany

[ES] => Spain

[IN] => India

[US] => United States

)

Krsort()函数是根据关键字对数组进行倒排,Listing D就是这样的例子:

Listing D

<?php $data = array(“US” => “United States”, “IN” => “India”, “DE” => “Germany”, “ES” => “Spain”);krsort($data); print_r($data);

?>

它的输出结果如下:

Array ([US] => United States

[IN] => India

[ES] => Spain

[DE] => Germany

)

根据值排序

如果你想使用值排序来取代关键字排序的话,PHP也能满足你的要求。你只要使用asort()函数来代替先前提到的ksort()函数就可以了。如Listing E所示:

Listing E

<?php $data = array(“US” => “United States”, “IN” => “India”, “DE” => “Germany”, “ES” => “Spain”);asort($data); print_r($data);

?>

下面就是它的输出结果。请注意这个结果与上面使用ksort()函数所得到的结果的不同——在这两种情况中,都是按字母顺序进行排序的,但是它们是根据数组的不同字段进行排序的。

同时,请注意关键字-值之间的联系会始终保持;它只是关键字-值对排序后的一种方式,排序并不会改变它们的对应关系。

Array ([DE] => Germany

[IN] => India

[ES] => Spain

[US] => United States

)

现在,你肯定能猜到这种排序也可以进行倒排,它使用arsort()函数完成这个功能。Listing F就是一个例子:

Listing F

<?php $data = array(“US” => “United States”, “IN” => “India”, “DE” => “Germany”, “ES” => “Spain”);arsort($data); print_r($data);

?>

下面是它的输出结果,根据值按字母表顺序进行倒排。将下面的结果与用krsort()函数进行倒排后生成的结果进行比较,就能很容易明白两者的不同了。

Array ([US] => United States

[ES] => Spain

[IN] => India

[DE] => Germany

)

自然语言排序

PHP有一个非常独特的排序方式,这种方式使用认知而不是使用计算规则。这种特性称为自然语言排序,当创建模糊逻辑应用软件的时候这种排序方式非常有用。下面大家可以来看看它的一个简单例子,如Listing G所示:

Listing G

<?php $data = array(“book-1”, “book-10”, “book-100”, “book-5”); sort($data);print_r($data);

natsort($data); print_r($data);?>

它的输出结果如下:

Array ([0] => book-1

[1] => book-10

[2] => book-100

[3] => book-5

)

Array

(

[0] => book-1

[3] => book-5

[1] => book-10

[2] => book-100

)

它们的不同已经很清楚了:第二个排序结果更直观,更“人性化”,然而第一个则更符合算法规则,更具“计算机”特点。

自然语言能进行倒排吗?答案是肯定的!只要对natsort()的结果使用array_reverse()函数就可以了,Listing H就是一个简单例子:

Listing H

<?php $data = array(“book-1”, “book-10”, “book-100”, “book-5”);natsort($data); print_r(array_reverse($data));

?>

下面是它的输出结果:

Array ([0] => book-100

[1] => book-10

[2] => book-5

[3] => book-1

)

根据用户自定义的规则排序

PHP也能让你定义自己的排序算法,你可以通过创建你自己的比较函数,并把它传递给usort()函数。如果第一个参数比第二个参数“小”的话,比较函数必须返回一个比0小的数,如果第一参数比第二个参数“大”的话,比较函数应该返回一个比0大的数。

Listing I就是这样的一个例子,在这个例子中根据它们的长度对数组元素进行排序,最短的项放在最前面:

Listing I

<?php $data = array(“joe@”, “@”, “asmithsonian@”, “jay@”);usort($data, ‘sortByLen’);

print_r($data); function sortByLen($a, $b) {

if (strlen($a) == strlen($b)) {

return 0;

} else {

return (strlen($a) > strlen($b)) ? 1 : -1;

}

}

?>

这样,就创建了我们自己的比较函数,这个函数使用strlen()函数比较每一个字符串的个数,然后分别返回1,0或-1.这个返回值是决定元素排列的基础。下面是它的输出结果:

Array ([0] => jay@

[1] => joe@

[2] => @

[3] => asmithsonian@

)

自然语言排序

PHP有一个非常独特的排序方式,这种方式使用认知而不是使用计算规则。这种特性称为自然语言排序,当创建模糊逻辑应用软件的时候这种排序方式非常有用。下面大家可以来看看它的一个简单例子,如Listing G所示:

Listing G

<?php $data = array(“book-1”, “book-10”, “book-100”, “book-5”); sort($data);print_r($data);

natsort($data); print_r($data);?>

它的输出结果如下:

Array ([0] => book-1

[1] => book-10

[2] => book-100

[3] => book-5

)

Array

(

[0] => book-1

[3] => book-5

[1] => book-10

[2] => book-100

)

它们的不同已经很清楚了:第二个排序结果更直观,更“人性化”,然而第一个则更符合算法规则,更具“计算机”特点。

自然语言能进行倒排吗?答案是肯定的!只要对natsort()的结果使用array_reverse()函数就可以了,Listing H就是一个简单例子:

Listing H

<?php $data = array(“book-1”, “book-10”, “book-100”, “book-5”);natsort($data); print_r(array_reverse($data));

?>

下面是它的输出结果:

Array ([0] => book-100

[1] => book-10

[2] => book-5

[3] => book-1

)

根据用户自定义的规则排序

PHP也能让你定义自己的排序算法,你可以通过创建你自己的比较函数,并把它传递给usort()函数。如果第一个参数比第二个参数“小”的话,比较函数必须返回一个比0小的数,如果第一参数比第二个参数“大”的话,比较函数应该返回一个比0大的数。

Listing I就是这样的一个例子,在这个例子中根据它们的长度对数组元素进行排序,最短的项放在最前面:

Listing I

<?php $data = array(“joe@”, “@”, “asmithsonian@”, “jay@”);usort($data, ‘sortByLen’);

print_r($data); function sortByLen($a, $b) {

if (strlen($a) == strlen($b)) {

return 0;

} else {

return (strlen($a) > strlen($b)) ? 1 : -1;

}

}

?>

这样,就创建了我们自己的比较函数,这个函数使用strlen()函数比较每一个字符串的个数,然后分别返回1,0或-1.这个返回值是决定元素排列的基础。下面是它的输出结果:

Array ([0] => jay@

[1] => joe@

[2] => @

[3] => asmithsonian@

)

多维排序

最后,PHP也允许在多维数组上执行一些比较复杂的排序——例如,首先对一个嵌套数组使用一个普通的关键字进行排序,然后再根据另一个关键字进行排序。这与使用SQL的ORDER BY语句对多个字段进行排序非常相似。为了能更好的明白它是如何工作的,请仔细看Listing J所举的例子:

Listing J

<?php $data = array(array(“id” => 1, “name” => “Boney M”, “rating” => 3),

array(“id” => 2, “name” => “Take That”, “rating” => 1),

array(“id” => 3, “name” => “The Killers”, “rating” => 4),

array(“id” => 4, “name” => “Lusain”, “rating” => 3),

); foreach ($data as $key => $value) {

$name[$key] = $value[‘name’];

$rating[$key] = $value[‘rating’];

}

array_multisort($rating, $name, $data); print_r($data);?>

这里,我们在$data数组中模拟了一个行和列数组。然后,我使用array_multisort()函数对数据集合进行重排,首先是根据rating进行排序,然后,如果rating相等的话,再根据name排序。它的输出结果如下:

Array ([0] => Array

(

[id] => 2

[name] => Take That

[rating] => 1

) [1] => Array

(

[id] => 1

[name] => Boney M

[rating] => 3

)

[2] => Array

(

[id] => 4

[name] => Lusain

[rating] => 3

)

[3] => Array

(

[id] => 3

[name] => The Killers

[rating] => 4

)

)

array_multisort()函数是PHP中最有用的函数之一,它有非常广泛的应用范围。另外,就如你在例子中所看到的,它能对多个不相关的数组进行排序,也可以使用其中的一个元素作为下次排序的基础,还可以对数据库结果集进行排序。

这些例子应该让你对PHP中各种数组排序函数的使用有了初步的了解,也向你展示了一些隐藏在PHP数组处理工具包的内部功能。

The resource is not on the build path of a PHP project

修改 .project 为

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
 <name>z</name>
 <comment></comment>
 <projects>
 </projects>
 <buildSpec>
  <buildCommand>
   <name>net.sourceforge.phpeclipse.parserbuilder</name>
  <arguments>
  </arguments>
  </buildCommand>
 </buildSpec>
<natures>
<nature>net.sourceforge.phpeclipse.phpnature</nature>
</natures>
</projectDescription>

 

替换文本SQL

替换文本SQL

UPDATE `linuxso_archives` SET `title` = replace(title,’原来的’, ‘新的’ ) WHERE `typeid` =18;

thinkphp 之windows->Linux apache->nginx

服务器迁移

windows->Linux

apache->nginx

 

配置如下:

thinkphp->’URL_MODEL’ => 3

#所有找不到的请求转到index处理

location / {
index index.html index.htm index.php;
if (!-e $request_filename){
rewrite ^(.*)$ /index.php/$1 last;
break;
}
}

#其他处理
location ~ .*\.(php|php5)?$
{
#fastcgi_pass  unix:/tmp/php-cgi.sock;
fastcgi_pass  127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}

#index的处理

location ~ index\.php($|/) {
set $script     $uri;
set $path_info  “/”;
if ($uri ~ “^(.+\.php)(/.+)”) {
set $script     $1;
set $path_info  $2;
}

fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php?IF_REWRITE=1;
include fastcgi_params;
fastcgi_param PATH_INFO $path_info;
fastcgi_param  SCRIPT_FILENAME  /url/index.php;
fastcgi_param SCRIPT_NAME “”;
}

Iftop安装指南

安装方法1:如果采用编译安装可以到iftop官网下载最新的源码包。
安装前需要已经安装好基本的编译所需的环境,比如make、gcc、autoconf等。安装iftop还需要安装libpcap和libcurses。
CentOS上安装所需依赖包:
yum install flex byacc  libpcap ncurses ncurses-devel libpcap-devel
Debian上安装所需依赖包:
apt-get install flex byacc  libpcap0.8 libncurses5
下载iftop
wget 
http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz
tar zxvf iftop-0.17.tar.gz
cd iftop-0.17
./configure
make && make install
configure: error: can’t find pcap.h
You’re not going to get very far without libpcap.
那你需要先安装libpcap,找到相应的rpm文件,比如:
-rw-r–r– 1 root root  108987 Apr  3 08:21 libpcap-0.9.4-8.1.i386.rpm
-rw-r–r– 1 root root  119062 Apr  3 08:21 libpcap-devel-0.9.4-8.1.i386.rpm
安装方法2:(懒人办法,最简单)
直接省略上面的步骤
flibpcap-0.9.4-14.el5.x86_64.rpm
CentOS系统:
yum install flex byacc  libpcap ncurses ncurses-devel
wget 
ftp://fr2.rpmfind.net/linux/dag/redhat/el5/en/i386/dag/RPMS/iftop-0.17-1.el5.rf.i386.rpm
rpm -ivh iftop-0.17-1.el5.rf.i386.rpm
Debian系统 运行:apt-get install iftop
运行iftop
直接运行: iftop

1、iftop界面相关说明
界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。
中间的<= =>这两个左右箭头,表示的是流量的方向。
TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量
2、iftop相关参数
常用的参数
-i设定监测的网卡,如:# iftop -i eth1
-B 以bytes为单位显示流量(默认是bits),如:# iftop -B
-n使host信息默认直接都显示IP,如:# iftop -n
-N使端口信息默认直接都显示端口号,如: # iftop -N
-F显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0
-h(display this message),帮助,显示参数信息
-p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;
-b使流量图形条默认就显示;
-f这个暂时还不太会用,过滤计算包用的;
-P使host信息及端口信息默认就都显示;
-m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M
进入iftop画面后的一些操作命令(注意大小写)
按h切换是否显示帮助;
按n切换显示本机的IP或主机名;
按s切换是否显示本机的host信息;
按d切换是否显示远端目标主机的host信息;
按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
按N切换显示端口号或端口服务名称;
按S切换是否显示本机的端口信息;
按D切换是否显示远端目标主机的端口信息;
按p切换是否显示端口信息;
按P切换暂停/继续显示;
按b切换是否显示平均流量图形条;
按B切换计算2秒或10秒或40秒内的平均流量;
按T切换是否显示每个连接的总流量;
按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
按j或按k可以向上或向下滚动屏幕显示的连接记录;
按1或2或3可以根据右侧显示的三列流量数据进行排序;
按<根据左边的本机名或IP排序;
按>根据远端目标主机的主机名或IP排序;
按o切换是否固定只显示当前的连接;
按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
按q退出监控。

PHP读取Excel数字问题

1.查看PHP配置文件precision默认12位

2.  格式化可能造成科学计数的数据

     

 if (strpos($d, '+') !== false){
          $d['express_no']=sprintf("%.2f", $d);
  }

 

 

 

php-fcgi进程数超过预设值问题的解决

昨日,有朋友问我,他将Web服务器换成Nginx 0.6.31 + PHP 4.4.7(FastCGI)后,有时候访问会出现“502 Bad Gateway”错误,如何解决。

我让按照以下两个步骤去解决,最后在第2步中将FastCGI的timeout时间增加为300,问题解决:

PS:比较羡慕迅雷的Web服务器,16G内存。

1、查看当前的PHP FastCGI进程数是否够用:
netstat -anpo | grep “php-cgi” | wc -l

如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。

2、部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例如:
……
http
{
……
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
……
}

 

==================================================

php-fpm 修改php-cgi进程数

vi /usr/local/php/etc/php-fpm.conf

修改这个里面的值
5

然后
/usr/local/php/sbin/php-fpm restart

==================================================
现象:
某日和开发的同事调试服务器php状态时候发现下面这种情况:
ps aux |grep php-fcgi |wc -l
602
表面上看是没什么问题,可是我明明记得 php-fcgi我只开了300个啊!难道有人改过了?
立 刻查看php-fpm.conf找到这一项
<value name=”max_children”>300</value>
确实是300个啊~~,怎么会有600个?
ps aux |grep php-fcgi |more
www      11707  0.0  0.7 250192  3888 ?        S    17:07
www      11708  0.0  0.7 250192  3888 ?        S    17:07
www      11709  0.0  0.7 250192  3888 ?        S    17:07
www      11710  0.0  0.7 250192  3888 ?        S    17:07
www      11711  0.0  0.7 250192  3888 ?        S    17:07
状态都正常啊,奇怪了。尝试把 php-fcgi重启一下
/usr/local/php-fcgi/sbin/php-fpm restart
Shutting down php_fpm . done
Starting php_fpm  done

再次查看
ps aux |grep php-fcgi |wc -l
602

还 是多了300个…..奇怪了,这三百个是怎么来的呢?
因为我们的php和nginx是 一起的,所以我又想到了nginx。
在访问量不高的时候偷偷重启了一下nginx
/etc/init.d/nginx restart
停止 nginx:                                               [确定]
Shutting down php_fpm  done
启动 nginx:                                               [确定]
Starting php_fpm  done

再次查看,我倒…..真服了。我和开发的同事都一头雾水
ps aux |grep php-fcgi |wc -l
602
这回不能简单的考虑重启服务了,需要想想到底是哪里 出的问题,而且这是生产服务器不能随便弄。
因为现在线上的服务都还算正常,这个问题我们就先放下了。
第二天,那个同事跟我说。那个问题他知道怎么解决了,而 且也知道是什么原因造成的。我赶紧问清楚:
原来是这样,最近因为测试比较频繁,对nginx服务重启次数较多。不知道哪次重启时候失败导致nginx进程虽然停止了,
但是一起的300个php-fcgi却没有重启,导致这些进程还留在内存里不能被释放。需要强制手动杀掉所有的php- fcgi进程后再重启php-fpm就可以了。
听到这里我恍然大悟。马上去服务器上操作,果然问题解决了,具体步骤如下
pkill php-cgi
再次查看
ps aux |grep php-fcgi |wc -l
1
好了没有了,赶紧重启,因为现在访问网页已经是 502了。
/usr/local/php-fcgi/sbin/php-fpm restart
Shutting down php_fpm warning, no pid file found – php-fpm is not running ?
Starting php_fpm  done
再次查看进 程数
ps aux |grep php-cgi |wc -l
302
好了,正常 了,呵呵
后来我在试验机上面又测试了一下,果然重现了那个问题

[root@ime /]# /etc/init.d/nginx restart
停止 nginx:                                               [确定]
Shutting down php_fpm  done
启动 nginx:                                               [确定]
Starting php_fpm  done
[root@ime /]# ps aux |grep php-cgi|wc -l
302
这时进程数是正常的,下面杀掉nginx 进程
[root@ime /]# pkill nginx
[root@ime /]# lsof -i:80
[root@ime /]# ps aux |grep php-cgi|wc -l
302
这300个进程就傻乎乎的留在这里了,再 次启动nginx
[root@ime /]# /etc/init.d/nginx start
启动 nginx:                                               [确定]
Starting php_fpm  done
[root@ime /]# lsof -i:80
COMMAND   PID USER   FD   TYPE DEVICE SIZE NODE NAME
nginx   14072 root    8u  IPv4  64090       TCP *:http (LISTEN)
nginx   14073  www    8u  IPv4  64090       TCP *:http (LISTEN)

[root@ime /]# ps aux |grep php-cgi|wc -l
603
php-fcgi没有去理会在内存中存在的进程,继续开启了300个…
我如果再重复这个过程呢?
[root@ime /]# pkill nginx
[root@ime /]# lsof -i:80
[root@ime /]# /etc/init.d/nginx start
启动 nginx:                                               [确定]
Starting php_fpm  done
[root@ime /]# pkill nginx
[root@ime /]# lsof -i:80
[root@ime /]# ps aux |grep php-cgi|wc -l
904
900个… 继续重复
[root@ime /]# /etc/init.d/nginx start
启动 nginx:                                               [确定]
Starting php_fpm  done
[root@ime /]# ps aux |grep php-cgi|wc -l
954
[root@ime /]# ps aux |grep php-cgi|wc -l
1205
机 器开始变慢了,估计再重复几次机器就会挂掉了…
[root@ime /]# pkill php-cgi
[root@ime /]# ps aux |grep php-cgi|wc -l
5
[root@ime /]# ps aux |grep php-cgi|wc -l
5
[root@ime /]# ps aux |grep php-cgi|wc -l
1
[root@ime /]# /etc/init.d/nginx restart
停止 nginx:                                               [确定]
Shutting down php_fpm warning, no pid file found – php-fpm is not running ?
启动 nginx:                                               [确定]
Starting php_fpm  done
[root@ime /]# ps aux |grep php-cgi|wc -l
302
好了,恢复正常….
看来需要修改一下 php-fpm的启动脚本了

=====================================================================

1、查看当前的PHP FastCGI进程数是否够用:
netstat -anpo | grep “php-cgi” | wc -l

如果实际使用的 “FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。
2、部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例如:
……
http
{
……
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
……
}
……

将原始文件重命名后下载,有助于处理路径的安全非暴露问题

/**
 * 文件下载
 * @param $filepath 文件路径 为绝对或者相对的物理地址(一定是物理地址);
 * @param $filename 文件名称 将下载的文件重新命名
 */
function file_down($filepath, $filename = '') {
    if(!$filename) $filename = basename($filepath);
    if(is_ie()) $filename = rawurlencode($filename);
    $filetype = fileext($filename);
    $filesize = sprintf("%u", filesize($filepath));
    if(ob_get_length() !== false) @ob_end_clean();
    header('Pragma: public');
    header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Cache-Control: pre-check=0, post-check=0, max-age=0');
    header('Content-Transfer-Encoding: binary');
    header('Content-Encoding: none');
    header('Content-type: '.$filetype);
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header('Content-length: '.$filesize);
    readfile($filepath);
    exit;
}

/**
 * 取得文件扩展
 * @param $filename 文件名
 * @return 扩展名
 */
function fileext($filename) {
    return strtolower(trim(substr(strrchr($filename, '.'), 1, 10)));
}

/**
 * IE浏览器判断
 */

function is_ie() {
    $useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
    if((strpos($useragent, 'opera') !== false) || (strpos($useragent, 'konqueror') !== false)) return false;
    if(strpos($useragent, 'msie ') !== false) return true;
    return false;
}

/**
* 产生随机字符串
*
* @param    int        $length  输出长度 
* @param    string     $chars   可选的 ,默认为 0123456789
* @return   string     字符串
*/
function random($length, $chars = '0123456789') {
    $hash = '';
    $max = strlen($chars) - 1;
    for($i = 0; $i < $length; $i++) {
        $hash .= $chars[mt_rand(0, $max)];
    }
    return $hash;
}

 

用法:

//$filename为相对的或者绝对的物理地址,不能是http地址,否则出错          

           $basefilename = basename($filename);
$ext = fileext($basefilename);
$basefilename = date(‘Ymd_his’).random(3).’.’.$ext;
file_down($filename, $basefilename);

thinkphp框架在nginx环境下去掉index.php路径显示

协助用户将apache下的一个网站迁移到nginx环境中,结果发现用户用的ThinkPHP框架做的开发,默认用的pathinfo。

这是一个很头疼的问题,因为nginx不支持pathinfo,贸然一并打开也担心不安全。

于是查询资料后整理如下:

找到applications/Conf/的配置文件 config.php
return array(
‘URL_MODEL’=>2,  //关于URL更多说明请参考Tinkphp/Common/convention.php
);
复制代码
配置 Nginx.conf

在你的虚拟主机下添加

location / {
if (!-e $request_filename){
rewrite ^/(.*)$ /index.php/$1 last;
}
}
复制代码
如果你的项目入口文件在一个子目录内则

location /目录/ {
if (!-e $request_filename){
rewrite ^/目录/(.*)$ /目录/index.php/$1 last;
}
}

点评:
测试成功,注意Tinkphp/Common/convention.php
和网站下的applications/Conf/config.php
两个文件 都要修改。

主要就是改成模式2,rewrite方式就可以了。

win8 音频服务无法启动的解决方法是什么

win+R,输入”regedit”打开注册表编辑器,搜索”Audiosrv”~用全字匹配,把里面的RequiredPrivileges后面对应的Data数据里面的数据的后两项删除,只保留SeChangeNotifyPrivilege。

注册表修改后进入控制面板——管理工具——进入服务——双击Windows Audio,选择登陆——此帐户——浏览——高级——立即查找——LOCALSERVICE确定——密码清空——Ok!!!!