php提供了mkdir来创建文件,但对应5.0一下的版本不支持递归创建多级目录,也就是说给定要创建的目录的上级目录不存在,那么就会创建失败。5.0及以上版本通过吧第三个参数设置为TRUE,就能递归创建指定的目录。不过自己实现一个递归创建多目录的函数也很简单,具体代码如下:
function mkdirs($dir){
if(!is_dir($dir)){
if(!mkdirs(dirname($dir))){
return FALSE;
}
if(!mkdir($dir, 0777)){
return FALSE;
}
}
return TRUE;
}
借助于date和strtotime函数,可以轻松的获取本月、下月以及上月的第一天和最后一天,下面分别给出其实现。其中函数的参数date格式为yyyy-MM-dd。
1、给定一个日期,获取其本月的第一天和最后一天
function getCurMonthFirstDay($date) {
return date('Y-m-01', strtotime($date));
}
function getCurMonthLastDay($date) {
return date('Y-m-d', strtotime(date('Y-m-01', strtotime($date)) . ' +1 month -1 day'));
}
2、给定一个日期,获取其下月的第一天和最后一天
function getNextMonthFirstDay($date) {
return date('Y-m-d', strtotime(date('Y-m-01', strtotime($date)) . ' +1 month'));
}
function getNextMonthLastDay($date) {
return date('Y-m-d', strtotime(date('Y-m-01', strtotime($date)) . ' +2 month -1 day'));
}
3、给定一个日期,获取其下月的第一天和最后一天
function getPrevMonthFirstDay($date) {
return date('Y-m-d', strtotime(date('Y-m-01', strtotime($date)) . ' -1 month'));
}
function getPrevMonthLastDay($date) {
return date('Y-m-d', strtotime(date('Y-m-01', strtotime($date)) . ' -1 day'));
}
其中strtotime函数参数“+1 month”,php会根据具体月份来确定增加多少天,可能是28、29(2月)、30(小月)或 31(大月);某月的第一天 “-1 day” 自然就是上个月最后一天,php也会根据月来智能确定是28、29、30或31。
strtotime 的功能很强大,详细用法可以查看官方文档:http://php.net/manual/zh/function.strtotime.php 。
重命名了一个web项目,然后修改apache的配置到新目录后重启,出现如下错误提示:
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
由于老的目录已经删除,开始怀疑是apache重启时候找不到老的目录报错,在网上查了一下,此错误是因为getcwd命令无法获取当前执行命令时的工作目录,可能是由于该目录已经被其他的程序删除。例如:你先用一个终端进入到目录 /home/yangyz/test,再开启另外一个终端删除目录 /home/yangyz/test,然后再第一个终端中执行某些命令或启动某些服务的时候就会看到上述的错误提示。
解决办法就是使用cd进入到任何一个实际存在的目录,然后再执行相应命令即可。
1、获取文件名:basename();
2、获取文件所在的目录:dirname();
3、pathinfo()获取文件信息,返回结果为一个array,包括路径、文件全名、文件名和扩展名。例如:
$file = '/com/netingcn/error.log';
print_r(pathinfo($file));
结果为:
Array(
[dirname] => /com/netingcn
[basename] => error.log
[extension] => log
[filename] => error
)
4、判断文件是否存在:is_file();
5、判断目录是否存在:is_dir();
6、判断文件或目录是否存在:file_exists();
7、读取文件所有内容:file()或file_get_contents(),其中file()返回的是一个一行为元素的array,file_get_contents()把文件全部内容作为一个String返回;
8、写文件fwrite,如:
$handler = fopen($file, 'w'); // w 会冲掉以前的内容、a 是追加
fwrite($handler, 'content');
fclose($handler); //记得关闭打开的文件句柄
9、文件读取操作有很多,下面简单介绍几个:
$handler = fopen($file, 'r');
while(!feof($handler)) {
$datas[] = fgets($handler); //读取一行内容
}
while(!feof($handler)) {
$datas[] = fgetss($handler); //读取一行内容并过来html标记
}
while(!feof($handler)) {
$datas[] = fgetcsv($handler); //读取一行内容并解析csv字段
}
$content = fread($handler, $strLength); //读取指定长读的字符
fclose($handler);
由于屏幕关闭加上长时间没有操作可能导致centos进行深度休眠,此时只能通过电源键来强制重启。可以通过修改X11的配置来禁止休眠,配置文件为/etc/X11/xorg.conf,注意修改此文件前记得备份,防止由于配置错误导致无法进行X11桌面。
修改涉及两个地方,第一个是 Section “Monitor”,查看其配置中是否有 DPMS,且其值为 false,保证配置信息如下:
Option "DPMS" "false"
第二个修改是增加一个 Section “ServerFlags”,包含的内容如下:
Section "ServerFlags"
Option "BlankTime" "0"
Option "StandbyTime" "0"
Option "SuspendTime" "0"
Option "OffTime" "0"
EndSection
通常的做法是把函数指针赋值给dom对象,例如:
function loadProcess() {
//do something
}
window.onload = loadProcess;
或
window.onload = function() {
//do something
}
因为这种方法会出现覆盖的问题,因此采用此种方法可能会由于其他地方也对window对象onload事件绑定事件造成上述代码不会被执行。比较好的做法是通过attachEvent(针对IE)或addEventListener的方式来绑定事件。例如可以定义如下函数:
function bindEvent(obj, event, func) {
if (obj.addEventListener) {
obj.addEventListener(event, func, false);
} else if (obj.attachEvent) {
obj.attachEvent("on" + event, func);
}
}
调用方法为:
function loadProcess() {
//do something
}
bindEvent(window, 'load', loadProcess);
或采用匿名函数的方式
bindEvent(window, 'load', function() {
//do something
});
注意:event参数的值不需要“on”,如果同一个对象相同事件绑定了多次,则都会被执行。
删除数组中的元素,第一想法是使用unset函数,它确实可以删除,但是可能会在后面操作该数组的时候出现问题。通过下面的例子来说明:
$arr = array(0, 1, 2, 3, 4);
$index = 2;
unset($arr[$index]);
echo count($arr);
if (empty($arr[$index])) {
echo "arr[$index] is empty";
}
print_r($arr);
输出为:
4
arr[2] is empty
Array([0] => 0 [1] => 1 [3] => 3 [4] => 4)
从上面的输出结果可以看到数组的长度是正常的,但是下标还是保持原来的,所以按照下标去获取元素就会出问题。另外此方法对key-value形式的数组是安全的。
如何安全的删除元素呢?可以使用array_splice函数。array_splice()的用途是删除原始数组中指定的一系列元素,并用其他值代替(如果指定),返回值是被删除的元素。更多信息可以参考官方文档:http://php.net/manual/zh/function.array-splice.php。例如:
$arr = array(0, 1, 2, 3, 4);
$rtn = array_splice($arr, 2, 1);
echo count($arr);
print_r($arr);
print_r($rtn);
输出为:
4
Array
([0] => 0 [1] => 1 [2] => 3 [3] => 4)
Array([0] => 2)
如果想获取删除首位元素后的数组,则可以有两种方法:
1、
$arr = array(0, 1, 2, 3, 4);
array_splice($arr, 0, 1);
2、
$arr = array(0, 1, 2, 3, 4);
$arr = array_splice($arr, 1);
最近浏览器提示flash有新版本,需要升级,按提示提示去adobe的官网下载安装包,注意这个安装包大小不到1M,只是一个壳,它会去下载最新版所需要的文件,但是每次通过它安装都是失败(下载文件进度条在50%左右的时候),也没有给任何错误提示,很是郁闷。后来查了一下,有人说要先卸载老版本的,卸载程序在:应用程序 –> 使用工具中,卸载后安装还是失败,这下麻烦了,新的安装不了,老的又卸载了。进过一番折腾最后终于安装上最新版的flash了。下面介绍详细步骤。
首先进入 http://get.adobe.com/cn/flashplayer/ 点击“立即下载”转到 http://get.adobe.com/cn/flashplayer/download/?installer=Flash_Player_11_for_Mac_OS_X_10.6_-_10.9&os=OSX&browser_type=Gecko&browser_dist=Firefox&d=Adobe_Photoshop_Lightroom_for_Macintosh&dualoffer=false这个页面,此时会提示保存下载文件,选择取消,在此页面的左下角找到“单击此处*以查看疑难解答信息”,点击“单击此处”去到页面 http://helpx.adobe.com/flash-player/kb/installation-problems-flash-player-mac.html,这个页面都是一些无用的帮助信息,不过上面提供了一个离线安装包到是最有用的,查找”Download from the direct link“,在其下面一行有”Click here to download Flash Player“,点击”here“就会开始下载离线安装包。通过这个离线安装包,顺利安装最新版flash。
sort是array对象自带的方法,可以对array中的元素按升序的方式进行排列。如果sort方法没有指定参数,那么array的元素会按照字符的编码数据进行排序。如果想对其他类型的元素进行排序,就需要自己实现一个比较函数作为参数传递给sort,此函数有两个参数a和b,当 a 大于 b 返回大于0的数,a 等于 b 返回0,否则返回一个小于0的值。
需要注意的是排序是在原array上进行的,不会生成副本。
例如一个array为[20,17,15,30,100],默认排序后的结果为100,15,17,20,30。可以看到并不是按照数值的大小排序,如果想要按照数值的大小排序,可以自己实现一个function,如:
function intSort(a, b) {
return a - b;
}
var arr = [20,17,15,30,100];
arr.sort(intSort);
//或通过匿名函数的方式
arr.sort(
function(a, b) {
return a - b;
}
);
//倒序排序
arr.sort(intSort).reverse();
另外如果想按照倒序排列,可以先对array进行sort,然后调用reverse方法即可。
有两种方法可以在命令行下执行sql命令。第一种是使用“-e“参数来指定需要执行的sql语句;第二种是通过管道的方式。语法及例子如下:
1、
MYSQL_HOME/bin/mysql -u用户名 -p密码 -D数据库名 -e"sql 语句"
/usr/local/mysql/bin/mysql -uroot -p123456 -Dmysql -e"select host,user from user";
2、
echo "sql 语句" | MYSQL_HOME/bin/mysql -u用户名 -p密码 -D数据库名
echo "select host,user from user" | /usr/local/mysql/bin/mysql -uroot -p123456 -Dmysql
上面命令执行的结果如下图。从图中可以看到二者的显示结果有些不一样。
使用场景多用在脚本中,例如定期执行存储过程、load data infile以及删除老数据等。