linuxphp参数
有的linux版本给出了一个LAMP(linux+apache+mysql+php),既然要学php,就把apache,mysql也一起装上吧,apache是服务器软件,mysql是数据库,php主要是在服务器端应用的
sudo tasksel
里面给出了一系列的软件安装,能简单的帮你弄好,/var/www是根目录,以后写好的php文档放在这里面就行,用浏览器http://localhost/或http://127.0.0.1/后面跟相应的文件名就可以了
‘贰’ 如何通过Linux命令行使用和运行PHP脚本
在 Linux 下执行 php 脚本时通常是可以使用以下命令:#/usr/local/php/bin/php test.php
为简化输入可把此php执行程序 到系统命令目录下:
#cp /usr/local/php/bin/php /usr/sbin/
验证:输入以下命令,如正确获取 php 版本,说明操作成功。
#php -v
这样,以后再执行PHP脚本时可直接采用以下输入方式即可。
#php a.php
‘叁’ linux源码包安装php中的./configure选项详解
1、Linux下,默认是在/usr/local/bin/,假如你设置--prefix=/usr/local/php那么就在/usr/local/php/bin/
2、sbin道理相同。sbin的意思就是server bin
3、EPREFIX没用过
4、如果要用2套版本,用prefix区分开不同的安装目录。php.ini默认在/usr/local/php/etc/
‘肆’ linux下安装php编译参数
在Linux下安装PHP,源代码方式安装,总需要配置很多参数。这里列出常用配置参数,并详细用中文解释说明了。给大家一些参考./configure
--prefix=/usr/local/php
php
安装目录
--with-apxs2=/usr/local/apache/bin/apxs
--with-config-file-path=/usr/local/php/etc
指定php.ini位置
--with-MySQL=/usr/local/mysql
mysql安装目录,对mysql的支持
--with-mysqli=/usr/local/mysql/bin/mysql_config
mysqli文件目录,优化支持
--enable-safe-mode
打开安全模式
--enable-ftp
打开ftp的支持
--enable-zip
打开对zip的支持
--with-bz2
打开对bz2文件的支持
--with-jpeg-dir
打开对jpeg图片的支持
--with-png-dir
打开对png图片的支持
--with-freetype-dir
打开对freetype字体库的支持
--without-iconv
关闭iconv函数,种字符集间的转换
--with-libXML-dir
打开libxml2库的支持
--with-xmlrpc
打开xml-rpc的c语言
--with-zlib-dir
打开zlib库的支持
--with-gd
打开gd库的支持
--enable-gd-native-ttf
支持TrueType字符串函数库
--with-curl
打开curl浏览工具的支持
--with-curlwrappers
运用curl工具打开url流
--with-ttf
打开freetype1.*的支持,可以不加了
--with-xsl
打开XSLT
文件支持,扩展了libxml2库
,需要libxslt软件
--with-gettext
打开gnu
的gettext
支持,编码库用到
--with-pear
打开pear命令的支持,php扩展用的
--enable-calendar
打开日历扩展功能
--enable-mbstring
多字节,字符串的支持
--enable-bcmath
打开图片大小调整,用到zabbix监控的时候用到了这个模块
--enable-sockets
打开
sockets
支持
--enable-exif
图片的元数据支持
--enable-magic-quotes
魔术引用的支持
--disable-rpath
关闭额外的运行库文件
--disable-debug
关闭调试模式
--with-mime-magic=/usr/share/file/magic.mime
魔术头文件位置
CGI方式安装才用的参数
--enable-fpm
打上php-fpm
补丁后才有这个参数,cgi方式安装的启动程序
--enable-fastcgi
支持fastcgi方式启动php
--enable-force-cgi-redirect
同上
,帮助里没有解释
--with-ncurses
支持ncurses
屏幕绘制以及基于文本终端的图形互动功能的动态库
--enable-pcntl
freeTDS需要用到的,可能是链接mssql
才用到
mhash和mcrypt算法的扩展
--with-mcrypt
算法
--with-mhash
算法
--with-gmp
--enable-inline-optimization
--with-openssl
openssl的支持,加密传输时用到的
--enable-dbase
--with-pcre-dir=/usr/local/bin/pcre-config
perl的正则库案安装位置
--disable-dmalloc
--with-gdbm
dba的gdbm支持
--enable-sigchild
--enable-sysvsem
--enable-sysvshm
--enable-zend-multibyte
支持zend的多字节
--enable-mbregex
--enable-wddx
--enable-shmop
--enable-soap
‘伍’ linux怎么查看php安装编译参数
1、Linux下,默认是在/usr/local/bin/,假如你设置--prefix=/usr/local/php那么就在/usr/local/php/bin/
2、sbin道理相同。sbin的意思就是server
bin
3、EPREFIX没用过
4、如果要用2套版本,用prefix区分开不同的安装目录。
‘陆’ linux为什么修改php配置参数max_execution_time不起作用
您是不是用vps的?如果是我也遇到问题,我用vultr的时候也是出现这样的情况,我用php链接数据库,一秒钟写一条数据,用while循环,发现只执行了89秒,多次尝试都发现还是这样。然后我有一次用别的服务器,发现这个长脚本没问题。后来我看到别的论坛说,这个是因为vps厂商限制了长脚本的运行,避免消耗母机的资源。
‘柒’ linux下php如何配置
1、MySQL的安装
在MySQL官网下载MySQL的安装文件MySQL-server-4.0.20-0.i386.rpm,执行下面的命令完成MySQL的安装。
rpm -ivh MySQL-server-4.0.20-0.i386.rpm
在没有设置MySQL密码的情况下,通过以下命令测试MySQL是否安装成功。
mysql -u root
出现类似welcome to the mysql mointor. commands end with;or \g的字样,说明安装成功。
2、Apache的安装
从Apache的官网下载UNIX版本的压缩包,以httpd-2.0.52.tar.gz为例,假设资源包放在/usr/local/src下,进入这个目录后解压缩,命令如下:
cd /usr/local/src
tar -zxvf httpd-2.0.52.tar.gz
解压缩后,进入目录httpd-2.0.52,执行以下命令:
./configure --prefix=/usr/local/apache2 --enable--mole=so
其中--prefix=/usr/local/apache2用来指定Apache的安装目录。接下来进行编译,执行一下命令完成安装。
make
mae install
3、配置PHP开发环境的安装
1)从PHP官网下载php5.1.4.tar.gz的压缩包,解压缩该文件包,命令如下:
tar -zxf php5.1.4.tar.gz
2)转到解压缩后的目录,执行以下命令完成PHP安装目录等相关配置:
./configure --prefix=/usr/local/php -with-mysql=/var/lib/mysql
3)接着编译PHP,命令如下:
make
make install
4)复制当前目录下的文件PHP大安装目录的lib目录下,并改名为php.ini,命令如下:
cp php.ini-dist /usr/local/php/lib/php.ini
‘捌’ PHP执行linux系统命令的常用函数使用说明
system函数
说明:执行外部程序并显示输出资料。
语法:string
system(string
command,
int
[return_var]);
返回值:
字符串
详细介绍:
本函数就像是
C
语中的函数
system(),用来执行指令,并输出结果。若是
return_var
参数存在,则执行
command
之后的状态会填入
return_var
中。同样值得注意的是若需要处理用户输入的资料,而又要防止用户耍花招破解系统,则可以使用
EscapeShellCmd()。若
PHP
以模块式的执行,本函数会在每一行输出后自动更新
Web
服务器的输出缓冲暂存区。若需要完整的返回字符串,且不想经过不必要的其它中间的输出界面,可以使用
PassThru()。
实例代码:
复制代码
代码如下:
<
?php
$last_line
=
system('ls',
$retval);
echo
'Last
line
of
the
output:
'
.
$last_line;
echo
'<hr
/>Return
value:
'
.
$retval;
?>
exec函数
说明:执行外部程序。
语法:string
exec(string
command,
string
[array],
int
[return_var]);
返回值:
字符串
详细介绍:
本函数执行输入
command
的外部程序或外部指令。它的返回字符串只是外部程序执行后返回的最后一行;若需要完整的返回字符串,可以使用
PassThru()
这个函数。
要是参数
array
存在,command
会将
array
加到参数中执行,若不欲
array
被处理,可以在执行
exec()
之前呼叫
unset()。若是
return_var
跟
array
二个参数都存在,则执行
command
之后的状态会填入
return_var
中。
值得注意的是若需要处理使用者输入的资料,而又要防止使用者耍花招破解系统,则可以使用
EscapeShellCmd()。
实例代码:
复制代码
代码如下:
<
?php
echo
exec('whoami');
?>
popen函数
说明:打开文件。
语法:int
popen(string
command,
string
mode);
返回值:
整数
详细介绍:
本函数执行指令开档,而该文件是用管道方式处理的文件。用本函数打开的文件只能是单向的
(只能读或只能写),而且一定要用
pclose()
关闭。在文件操作上可使用
fgets()、fgetss()
与
fputs()。若是开档发生错误,返回
false
值。
实例代码:
复制代码
代码如下:
<
?
$fp
=
popen("/bin/ls","r"
);
?>
PHP监控linux服务器负载
在实际项目的应用中,我们由于各种条件的现实,利用PHP来实现服务器负载监控将是一种更为灵活的方式。
由于Web
Server以及PHP的实现方式所限,我们在现实环境中很难利用PHP去调用一些Linux中需要root权限才能执行的程序,对此,我从网上找到另外一种方式来绕开这个限制。首先先写个c程序中转调用系统命令,然后用PHP去执行此c程序。
c程序
首先写个c文件,比如/usr/local/ismole/w.c
复制代码
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<systypes.h>
#include<unistd.h>
int
main()
{
uid_t
uid
,euid;
//note
获得当前的uid
uid
=
getuid();
//note
获得当前euid
euid
=
geteuid();
//note
交换这两个id
if(setreuid(euid,
uid))
perror("setreuid");
//note
执行将要执行linux系统命令
system("/usr/bin/w");
return0;
}
编译该文件gcc
-o
w
-Wall
w.c,这时会在当前目录下生成程序w。改变此程序的属主chmod
u+s
./w。
PHP执行
文件内容如下,放在web目录下,访问就会输出当前的服务器负载情况。
复制代码
代码如下:
<?php
/*
More
&
Original
PHP
Framwork
Copyright
(c)
2007
-
2008
IsMole
Inc.
$Id:
serverMonitor.php
408
2008-12-02
08:07:40Z
kimi
$
*/
//note
key的验证过程
if($key
!=
$authkey)
{
//
exit('key
error);
}
$last_line
=
exec('/usr/local/ismole/w',
$retval);
$returnArray
=
explode("load
average:
",
$retval[0]);
$returnString
=
$returnArray[1];
echo
$returnString;
按照上面的实例,我们可以用PHP来做任何我们想执行的Linux系统命令,SVN更新,服务器监控,备份,恢复,日常维护等等。
‘玖’ linux 系统下php 的mail()函数中参数 headers 的cc
mail 函数不能使用cc,建议使用phpmailer 的stmp功能发送,可以添加多个cc
‘拾’ php执行linux命令并输出终端屏幕显示的内容(实时)
PHP在linux上执行命令
目录:
一、PHP中调用外部命令介绍
二、关于安全问题
三、关于超时问题
四、关于PHP运行linux环境中命令出现的问题
一、PHP中调用外部命令介绍
在PHP中调用外部命令,可以用,1>调用专门函数、2>反引号、3>popen()函数打开进程,三种方法来实现:
方法一:用PHP提供的专门函数(四个):
PHP提供4个专门的执行外部命令的函数:exec(), system(), passthru(), shell_exec()
1)exec()
原型: string exec ( string $command [, array &$output [, int &$return_var ] )
说明: exec执行系统外部命令时不会输出结果,而是返回结果的最后一行。如果想得到结果,可以使用第二个参数,让其输出到指定的数组。此数组一个记录代表输出的一行。即如果输出结果有20行,则这个数组就有20条记录,所以如果需要反复输出调用不同系统外部命令的结果,最好在输出每一条系统外部命令结果时清空这个数组unset($output),以防混乱。第三个参数用来取得命令执行的状态码,通常执行成功都是返回0。
<?php
exec("dir",$output);
print_r($output);
?>
2)system()
原型: string system ( string $command [, int &$return_var ] )
说明: system和exec的区别在于,system在执行系统外部命令时,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。
<?php
system("pwd",$result);
print $result;//输出命令的结果状态码
?>
关于第二个参数结果状态码的简单介绍:
如果返回0是运行成功,
在Bash中,当错误发生在致命信号时,bash会返回128+signal number做为返回值。
如果找不到命令,将会返回127。
如果命令找到了,但该命令是不可执行的,将返回126。
除此以外,Bash本身会返回最后一个指令的返回值。
若是执行中发生错误,将会返回一个非零的值。
Fatal Signal : 128 + signo
Can't not find command : 127
Can't not execute : 126
Shell script successfully executed : return the last command exit status
Fatal ring execution : return non-zero
3)passthru()
原型: void passthru ( string $command [, int &$return_var ] )
说明: passthru与system的区别,passthru直接将结果输出到游览器,不返回任何值,且其可以输出二进制,比如图像数据。第二个参数可选,是状态码。
<?php
header("Content-type:image/gif");
passthru("/usr/bin/ppm2tiff /usr/share/tk8.4/demos/images/teapot.ppm");
?>
4)shell_exec()
原型: string shell_exec ( string $cmd )
说明: 直接执行命令$cmd
<?php
$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
?>
方法二:反撇号
原型: 反撇号`(和~在同一个键)执行系统外部命令
说明: 在使用这种方法执行系统外部命令时,要确保shell_exec函数可用,否则是无法使用这种反撇号执行系统外部命令的。
<?php
echo `dir`;
?>
方法三:用popen()函数打开进程
原型: resource popen ( string $command , string $mode )
说明: 能够和命令进行交互。之前介绍的方法只能简单地执行命令,却不能与命令交互。有时须向命令输入一些东西,如在增加系统用户时,要调用su来把当前用户换到root用户,而su命令必须要在命令行上输入root的密码。这种情况下,用之前提到的方法显然是不行的。
popen( )函数打开一个进程管道来执行给定的命令,返回一个文件句柄,可以对它读和写。返回值和fopen()函数一样,返回一个文件指针。除非使用的是单一的模式打开(读or写),否则必须使用pclose()函数关闭。该指针可以被fgets(),fgetss(),fwrite()调用。出错时,返回FALSE。
<?php
error_reporting(E_ALL);
/* Add redirection so we can get stderr. */
$handle = popen('/path/to/executable 2>&1', 'r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);
?>