免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 27149 | 回复: 11
打印 上一主题 下一主题

PHP中如何执行SHELL [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-29 23:33 |只看该作者 |倒序浏览

论坛徽章:
0
2 [报告]
发表于 2003-05-30 11:03 |只看该作者

PHP中如何执行SHELL

给你个例子看看
#!/usr/bin/php -q //你的PHP的路径
/home/httpd/vhosts/domain.com/path/to/script.php

## script.php is ##
<?php
phpinfo()
?>;

论坛徽章:
0
3 [报告]
发表于 2003-05-30 12:03 |只看该作者

PHP中如何执行SHELL

PHP执行系统命令?
例如我想用PHP做远程管理,查看在线用户等等。。。。
执行WHO。NETSTAT等命令

论坛徽章:
0
4 [报告]
发表于 2003-05-30 13:34 |只看该作者

PHP中如何执行SHELL

这次要讲的主题不是 PHP 在网页设计上的应用﹐而是 PHP 在 Shell Script 上的应用﹐一般所知的 Shell Script 大约就是 tcsh、bash、perl 或是 python 这几类语言﹐我所要谈的就是将 PHP 当成 Shell Script 来使用。
  PHP 执行档的安装
  一般 PHP 作为网页处理语言都是要编译成 Apache 的模块﹐这里当然不么做﹐也因此编译起来很简单﹐只要以 root 的身分进行如下动作 :
  解开 php-3.0.xx.tar.gz
  cd php
  configure
  make
  编译完之后﹐在 php 目录下有一个可执行档﹐档名为 php﹐将它 copy 到 /usr/local/bin 下即可。注意﹐如果档案太大﹐可以使用 strip 指令将 php 的方式将不必要的信息去除﹐这样档案就会小得多了。
  第一个程序
  开始撰写我们的第一个 PHP Shell Script 程序﹐这个例子印出 "Hello world !" :
  #!/usr/local/bin/php -q
  <?
  echo "Hello, world !";
  ?>;
  注意到 PHP 原本是应用在网页应用的﹐因此它内定会送出 HTML 的 HEADER﹐但是在此我们是要将 PHP 用作 Shell Script﹐"-q" 就是表示不要送出 HEADER 的意思﹐你可以试试看不加上 -q 的显示结果。
  在这个例子中﹐/usr/local/bin/php 是表示要执行 /usr/local/bin/ 下的 PHP﹐因为我们刚才将它装在该处。echo 指令将 "Hello, world !" 印出﹐其中的 "" 字符是换行字符。
  注意到在将这个程序存成档案后﹐须将其 chmod 成为可执行属性(chmod +x 文件名)﹐然后才能执行喔。
  进阶使用 I
  有时候我们需要在程序执行时﹐送进一些参数﹐比如说 ls 这个指令﹐后面可以加上 -l 参数﹐PHP Shell Script 一样也有支持这样的用法﹐有两个特殊的变量 : $argc 记录着后面送入参数的个数﹐$argv[] 数组参数存着的则是参数的内容。比如说我现在要设计一个算两个数字总和的程序 :
  #!/usr/local/bin/php -q
  <?
  $sum=0;
  $sum=$sum+$argv[1]+$argv[2];
  echo $sum;
  ?>;
  假设将此程序命名为 sum.php3﹐则执行 sum.php3 1 2 按下 enter 则会印出 3。
  如果要算出不特定个数的参数和﹐那么就得要用到 $argc 这个特殊变量了 :
  #!/usr/local/bin/php -q
  <?
  $sum=0;
  for ($t=1;$t<=$argc;$t++)
  $sum=$sum+$argv[$t];
  echo $sum;
  ?>;
  假设将此程序命名为 bigsum.php3﹐则执行 bigsum.php3 1 2 3 4 5 按下 enter 则会印出 15﹐执行 bigsum.php3 1 2 3 4 5 6 按下 enter 则会印出 21。
  有时候我们需要在程序执行中输入资料﹐但是 PHP 原本就是用于网页设计﹐而网页上的资料输入自然都是用 FORM 的方式来输入﹐所以这将 PHP 作为 Shell Script 时问题就来了﹐好在 PHP 有提供了开文件功能﹐而在 Linux/Uinx 之下﹐输入(input)这件事原本就可以用开档的方式来完成﹐我们要开启的是 /dev/stdin 这个设备档(stdin 是表示 standard input 的意思)﹐程序如下 :
  #!/usr/local/bin/php -q
  <?
  $fp=fopen("/dev/stdin","r";
  $inputstr=fgets($fp,100);
  fclose($fp);
   
  echo "\n----------------------\n";
  echo $inputstr;
  ?>;
  其中的 fgets($fp,100) 是指从 $fp 这个档案(也就是 "/dev/stdin"中读取出 100 个 byte 的资料﹐程序执行到这行便会停下来等待我们的输入﹐当我们输入完按下 enter 之后﹐程序就会将刚才我们输入的资料给印出来了。
  进阶使用 II
  虽然已经可以处理输入﹐但是这样的功能显然还是太简单﹐无法应付更大的应用﹐比如说我需要一个功能是将一串资料流(data stream)中的 HTML 给去除﹐这时便需要完整地处理输出输入转向的能力﹐我们可以先设计程序如下 :
  #!/usr/local/bin/php -q
  <?
  $fp=fopen("/dev/stdin","r";
   
  while(!feof($fp)) {
  $c=fgetc($fp);
  $inputstr=$inputstr.$c;
  };
   
  fclose($fp);
   
  echo $inputstr;
  ?>;
  假设将此程序命名为 filt.php3﹐如果你直接执行这个程序﹐它会一直等待你输入﹐直到你按下 Ctrl+D 后才会将你的输入资料给印出﹐我们可以这么执行它 :
  more filt.php3 | filt.php3
  这样的做法是将 filt.php3 这个程序用 more 给秀出并转向给 filt.php3 这个程序﹐filt.php3 会不断接受资料(事实上就是 filt.php3 程序代码本身)﹐最后将其印出。
  我们可以在其中加上过滤 HTML 的功能 :
  #!/usr/local/bin/php -q
  <?
  $fp=fopen("/dev/stdin","r";
   
  while(!feof($fp)) {
  $c=fgetc($fp);
  $inputstr=$inputstr.$c;
  };
   
  fclose($fp);
   
  $inputstr=ereg_replace("<([^<>;]*)>;","",$inputstr);
   
  echo $inputstr;
  ?>;
  假设将此程序命名为 filt2.php3﹐如此一来便完成了过滤功能﹐不信请拿个 HTML 档来试试看 :
  more xxx.html | filt2.php3
  你便会看到删除了 HTML TAG 的文件了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-05-30 14:58 |只看该作者

PHP中如何执行SHELL

泼盆冷水

php有时候做为这种方式运行效率非常不好,这可能是php的模块的执行效率有关,曾经尝试用php写了一个socket程序,然后换用perl重新写了一遍,perl的效率明显高得多,php的长项还是在web上,让我爱不释手。

论坛徽章:
0
6 [报告]
发表于 2003-05-30 19:02 |只看该作者

PHP中如何执行SHELL

system();

论坛徽章:
0
7 [报告]
发表于 2003-05-31 06:11 |只看该作者

PHP中如何执行SHELL

请问如何屏蔽掉php的一些系统函数呀,比如phpinfo()、system()等

因为这些函数太不安全了:0

论坛徽章:
0
8 [报告]
发表于 2003-05-31 23:23 |只看该作者

PHP中如何执行SHELL

修改,php.ini,参看相关文档
http://www.php.net/manual/zh/features.safe-mode.php

论坛徽章:
0
9 [报告]
发表于 2003-06-02 21:30 |只看该作者

PHP中如何执行SHELL

你说的是不是这个东西?
http://www.gimpster.com/php/index.php

论坛徽章:
0
10 [报告]
发表于 2003-06-02 22:06 |只看该作者

PHP中如何执行SHELL

^_^!你要的东西绝对就是这个!

http://www.gimpster.com/php/index.php
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP