php调用shell的方法

本文实例讲述了php调用shell的方法,分享给大家供大家参考。具体方法如下:

一、配置

查看php.ini中配置是否打开安全模式,主要是以下三个地方
safe_mode =  (这个如果为off下面两个就不用管了)
disable_functions =
safe_mode_exec_dir=

二、使用

由于PHP基本是用于WEB程序开发的,所以安全性成了人们考虑的一个重要方面。于是PHP的设计者们给PHP加了一个门:安全模式。如果运行在安全模式下,那么PHP脚本中将受到如下四个方面的限制:
 
① 执行外部命令
② 在打开文件时有些限制
③ 连接MySQL数据库
④ 基于HTTP的认证

在安全模式下,只有在特定目录中的外部程序才可以被执行,对其它程序的调用将被拒绝。这个目录可以在php.ini文件中用 safe_mode_exec_dir指令,或在编译PHP是加上--with-exec-dir选项来指定,默认是/usr/local/php /bin。
 
如果你调用一个应该可以输出结果的外部命令(意思是PHP脚本没有错误),得到的却是一片空白,那么很可能你的网管已经把PHP运行在安全模式下了。
 
三、如何做?
 
在PHP中调用外部命令,可以用如下三种方法来实现:
 
1) 用PHP提供的专门函数
 
PHP提供共了3个专门的执行外部命令的函数:system(),exec(),passthru()。
 
system()
 
原型:string system (string command [, int return_var])
 
system()函数很其它语言中的差不多,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。
 
例子:

代码如下:

system("/usr/local/bin/webalizer/webalizer");

exec()
 
原型:string exec (string command [, string array [, int return_var]])
 
exec() 函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array可以得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二个参数时,才可以用第三个参数,用来取得命令执行的状态码。
 
例子:

代码如下:

exec("/bin/ls -l");
exec("/bin/ls -l", $res);
#$res是一个数据,每个元素代表结果的一行
exec("/bin/ls -l", $res, $rc);
#$rc的值是命令/bin/ls -l的状态码。成功的情况下通常是0

passthru()
 
原型:void passthru (string command [, int return_var])
 
passthru() 只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。所以passthru()函数经常用来调用象pbmplus(Unix 下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。
 
例子:

代码如下:

header("Content-type: image/gif");
passthru("./ppmtogif hunte.ppm");

希望本文所述对大家的PHP程序设计有所帮助。

(0)

相关推荐

  • php调用KyotoTycoon简单实例

    本文实例讲述了php调用KyotoTycoon的方法.分享给大家供大家参考.具体如下: Kyoto Tycoon(简称KT)是Tokyo Tyrant 的作者Mikio Hirabayashi 的系列作品之一,KT 是一个数据库网络层服务,它提供一个插件机制,可以挂载几乎所有的数据库存储设备. 这里提供一个简单的应用实例: <?php require_once 'Net/KyotoTycoon.php'; use Net\KyotoTycoon; $cacheManager = new Kyot

  • PHP调用.NET的WebService 简单实例

    创建一个C#的web service,这个就不多说了,我用vs2008的wizard创建了一个最简单的,让它运行在:http://localhost/webservice1/service1.asmx 其中有个web method像这样的: 复制代码 代码如下: [WebMethod] public string HelloWorld() {     return "Hello World"; } ok,一切就绪.在某php文件中如下写法: php5本身就支持SOAP调用Web Ser

  • php有道翻译api调用方法实例

    本文实例讲述了php有道翻译api调用方法,这里我们利用了file_get_contents函数直接读取由api返回的数据进行处理,分享给大家供大家参考.具体分析如下: 调用之前我们需申请一个有道翻译API数据接口的key,地址如: 复制代码 代码如下: http://fanyi.youdao.com/openapi?path=data-mode 方法说明,数据接口: 复制代码 代码如下: http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>

  • PHP调用MySQL存储过程并返回值的方法

    本文实例讲述了php中调用执行mysql存储过程然后返回由存储过程返回的值,分享给大家供大家参考.具体分析如下: 调用存储过程的方法. a.如果存储过程有 IN/INOUT参数,声明一个变量,输入参数给存储过程,该变量是一对,一个php变量,也可以不必,只是没有php变量时,没有办法进行动态输入,一个Mysql变量. b.如果存储过程有OUT变量,声明一个Mysql变量,mysql变量的声明比较特殊,必须让mysql服务器知道此变量的存在,其实也就是执行一条mysql语句,入set @mysql

  • php调用mysql存储过程实例分析

    本文实例分析了php调用mysql存储过程的方法.分享给大家供大家参考.具体分析如下: Mysql存储过程创建语法,代码如下: CREATE PROCEDURE和CREATE FUNCTION : 复制代码 代码如下: CREATE PROCEDURE sp_name ([proc_parameter[,...]])       [characteristic ...] routine_body   CREATE FUNCTION sp_name ([func_parameter[,...]])

  • PHP递归调用数组值并用其执行指定函数的方法

    本文实例讲述了PHP递归调用数组值并用其执行指定函数的方法.分享给大家供大家参考.具体分析如下: 以下为wordpress原代码,为了偷懒,简单修改一下以适用其它函数 /** * Navigates through an array and removes slashes from the values. * * If an array is passed, the array_map() function causes a callback to pass the * value back t

  • Thinkphp调用Image类生成缩略图的方法

    本文实例讲述了Thinkphp调用Image类生成缩略图的方法.分享给大家供大家参考.具体分析如下: Thinkphp的Image类 在ThinkPHP/Extend/Library/ORG/Util/Image.class.php中. 调用方法如下: import("ORG.Util.Image"); $Img = new Image();//实例化图片类对象 $image_path = './图片路径'; //若当前php文件在Thinkphp的中APP_PATH路径中 //'./

  • php中动态调用函数的方法

    本文实例讲述了php中动态调用函数的方法.分享给大家供大家参考.具体分析如下: php中你可以动态调用函数,分为以下步骤: 1. 定义一个函数 2. 将函数名(字符串)赋值给一个变量 3. 使用变量名代替函数名动态调用函数 详细代码如下所示: <?php function addition ($a, $b){ echo ($a + $b), "\n"; } $result = "addition"; $result (3,6); ?> 希望本文所述对大家

  • php调用shell的方法

    本文实例讲述了php调用shell的方法,分享给大家供大家参考.具体方法如下: 一.配置 查看php.ini中配置是否打开安全模式,主要是以下三个地方 safe_mode =  (这个如果为off下面两个就不用管了) disable_functions = safe_mode_exec_dir= 二.使用 由于PHP基本是用于WEB程序开发的,所以安全性成了人们考虑的一个重要方面.于是PHP的设计者们给PHP加了一个门:安全模式.如果运行在安全模式下,那么PHP脚本中将受到如下四个方面的限制:

  • python调用shell的方法

    1.1  os.system(command) 在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态.这实际上是使用C标准库函数system()实现的.这个函数在执行command命令时需要重新打开一个终端,并且无法保存command命令的执行结果. 1.2  os.popen(command,mode) 打开一个与command进程之间的管道.这个函数的返回值是一个文件对象,可以读或者写(由mode决定,mode默认是'r').如果mode为'r',可以使用

  • Perl调用shell命令方法小结

    一.systemperl也可以用system调用shell的命令,它和awk的system一样,返回值也是它调用的命令的退出状态. 复制代码 代码如下: [root@AX3sp2 ~]# cat aa.pl#! /usr/bin/perl -w$file = "wt.pl";system("ls -l wt.pl");$result = system "ls -l $file";print "$result \n"; #输出命

  • Python调用shell cmd方法代码示例解析

    1.使用os.system()去调用,但是只能返回执行状态,不能获取shell cmd执行结果 #!/usr/bin/python # -*- coding: utf-8 import os status = os.system("ps aux |grep Xcode |grep -v grep") print status 2.使用os.popen执行并获取结果 ​ 如果返回是str,直接通过read拿结果使用,如果是多行,选择readlines转list获取每行内容 #整份字符串处

  • 利用Python+Java调用Shell脚本时的死锁陷阱详解

    前言 最近有一项需求,要定时判断任务执行条件是否满足并触发 Spark 任务,平时编写 Spark 任务时都是封装为一个 Jar 包,然后采用 Shell 脚本形式传入所需参数执行,考虑到本次判断条件逻辑复杂,只用 Shell 脚本完成不利于开发测试,所以调研使用了 Python 和 Java 分别调用 Spark 脚本的方法. 使用版本为 Python 3.6.4 及 JDK 8 Python 主要使用 subprocess 库.Python 的 API 变动比较频繁,在 3.5 之后新增了

  • 举例讲解Linux系统下Python调用系统Shell的方法

    时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的.那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法: 1. os 模块 1.1. os模块的exec方法族 Python的exec系统方法同Unix的exec系统调用是一致的.这些方法适用于在子进程中调用外部程序的情况,因为外部程序会替换当前进程的代码,不会返回.( 这个看了点 help(os)  --> search "exec" 的相关介绍,但是没太

  • Java调用Shell命令的方法

    本文实例讲述了Java调用Shell命令的方法.分享给大家供大家参考.具体如下: 近日项目中有这样一个需求:系统中的外币资金调度完成以后,要将调度信息生成一个Txt文件,然后将这个Txt文件发送到另外一个系统(Kondor)中.生成文件自然使用OutputStreamWirter了,发送文件有两种方式,一种是用写个一个类似于FTP功能的程序,另外一种就是使用Java来调用Shell,在Shell中完成文件的发送操作.我们选择后一种,即当完成外币资金的调度工作后,用Java的OutputStrea

  • python调用bash shell脚本方法

    目录 1. os.system() 1.1. demo 2. os.popen() 2.1 demo 3. commands模块 4. subprocess 4.1 demo 1. os.system() help(os.system) 1.1. demo os.system(command):该方法在调用完shell脚本后,返回一个16位的二进制数, 低位为杀死所调用脚本的信号号码,高位为脚本的退出状态码, 即脚本中exit 1的代码执行后,os.system函数返回值的高位数则是1,如果低位

  • Node.js中安全调用系统命令的方法(避免注入安全漏洞)

    在这篇文章中,我们将学习正确使用Node.js调用系统命令的方法,以避免常见的命令行注入漏洞. 我们经常使用的调用命令的方法是最简单的child_process.exec.它有很一个简单的使用模式;通过传入一段字符串命令,并把一个错误或命令处理结果回传至回调函数中. 这里是你通过child_process.exec调用系统命令一个非常典型的例子. 复制代码 代码如下: child_process.exec('ls', function (err, data) {     console.log(

  • JAVA如何调用Shell脚本

    在实际项目中,Java有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell.先把C写出来的make成可执行文件,然后再写一个shell脚本执行该可执行文件,最后是JAVA调用该shell脚本. JAVA调用很简单,例子如下: 首先是shell脚本 #!/bin/sh echo Begin word cluster /home/felven/word2vec/word2vec -train /home/felven/word2vec/resultbig.tx

随机推荐