COMMENTS

利用sudo为PHP批特权

有时候需要在web上执行一些特殊的终端命令。例如ps,为了在web上显示出当前的进程列表,因为我经常做一些系统方面的编程,所以有时候就不得不做这些高危险性的事情。用下边的方法就可以允许php用exec,system等函数来执行这些终端命令。
键入命令visudo,打开sudoers文件,编辑该文件
注释掉Defaults requiretty一行,并在文件末尾追加Apache ALL=NOPASSWD:/bin/ps
这样,在php中就可以用类似这样的语句去执行ps命令exec(”/usr/bin/sudo /bin/ps -e”); ,当然,ps的参数可以随意指定,和在终端下使用一样。需要注意的是这里使用的是apache服务器,不同的web服务器该方法应该不能混用。
不允许php来执行的命令有很多,比如chkconfig,想开启或关闭一个服务,这些只有root才能做的事情,普通用户都是没有权限的,跟何况要php去做。所以同样的会带来安全问题,总之慎用就好。

记之,与大家分享,以备后用。

PHP header发送各种类型文件下载

转载自网络,来源不详,在此感谢原作者。

<?php
header(’Content-type: application/image/pjpeg’);//输出的类型
header(’Content-Disposition: attachment; filename=”downloaded.jpg”‘); //下载显示的名字,注意格式
readfile(’my.jpg’);
// 并将这个文件以前面header发送信息设定的类型输出,从而会弹出一个下载框
// 就是把服务器上的my.jpg下载下来,下载显示和保存的名字默认是downloaded.jpg
?> 附带文档类型及服务器响应类别
一共两个版本.
文档类型   和 服务器响应HTTP的类型
上面的这个可以在上传文件的类型中对应上.下面的差了点.(原文下面的是用来写在文件头上的.来确定该文件是什么类型.)

继续阅读

有关PHP中类似ASP application对象的搜索整理

今天和同事讨论起怎么在PHP中实现多个客户端去修改和获得同一个服务端变量的问题,其实就是ASP中的application对象的作用了。

原来事情没有那么简单,PHP中没有提供类似application对象这样的方法,经过一番搜索,整理出网上常用的三种方法来实现。

其实都是很容易想得到的办法,存取文件,存取数据库,共享内存。若有其他方法欢迎告知。

网上还找到一个可以实现这个功能的类,没有测试,大概看了看,核心还是采用的存取文件的方法,所以就没有保存。

既然只能这样实现,就不多说了,有关共享内存可以搜索手册,手册中有详细的方法。搜索的关键词可以用shm,shmop_open,shmop_reade,shmop_write等。

整理之留备后用。

PHP file函数读取文件遇到<***>时的奇怪问题

今天用file函数时,发现一个很奇怪的问题,本意是用file()读一个文本文件,这个文本文件是我定义的一个配置文件config.txt,类似于这样的格式:
</hello_config> 12
</hello_config2>15

用下边简单的两行代码,就发现了这个奇怪的问题

<?php
$fp=file(”/root/config.txt”);
echo $fp[0];
?>

输出的结果居然是12,而并非</hello_config> 12,看起来好像PHP认出了<>类似这样的配置文件字符,因为当我把</hello_config> 12 改为hello_config 12 或者<> 12时,输出的正是hello_config 12或者<> 12。

没有在手册中找到相关的信息,手册中仅仅说file – 把整个文件读入一个数组中,凭什么<***>就被丢掉了。

不知是不是我PHP中配置了什么东西,研究中…………

:):):):):):):):) 快乐的分割线 :):):):):):):):)

大意了大意了,还以为PHP有什么鲜为人知的超能力,原来仅仅是html转义字符的问题

不知看文章的你明白了没,html中试图直接输出<***>时要小心了,因为html会以为<***>是html的标签了,因此得用&lt,&gt代替<>

:(:(:(:(:(:(:(:( 悲伤的分割线 :(:(:(:(:(:(:(:(

原来这样子就结束了

一则PHP文件上传小程序

这段程序基本实现了小文件上传的各种控制操作,包括文件类型,文件大小(包括PHP post_max_size的设置和程序本身的限制),图片文件的尺寸,供大家参考,有问题欢迎指正。

<?php
function return_bytes($postsize) {
$a=trim(eregi_replace(”[^0-9]“,”",$postsize));
$a=$a*1024*1024;
return $a;
}

继续阅读