导航:首页 > 程序命令 > php调用dos命令

php调用dos命令

发布时间:2023-05-20 03:46:57

❶ 菜鸟求助:php中调用系统命令为何有些命令总是失败

PHP执行系统命令(简介及方法)
在PHP中调用外部命令,可以用如下三种方法来实现:
方法一:用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在执行系统外部命令时,直接将结果输出到游览器,如果执行命令成功则返回true,否则返回false。第二个参数与exec第三个参数含义一样。
<?php
system("pwd");
?>
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);
?>
要考虑两个问题:安全性和超时
1)安全性
由于PHP基本是用于WEB程序开发的,所以安全性成了人们考虑的一个重要方面 。于是PHP的设计者们给PHP加了一个门:安全模式。如果运行在安全模式下,那么PHP脚本中将受 到如下四个方面的限制:
执行外部命令
在打开文件时有些限制
连接MySQL数据库
基于HTTP的认证
在安全模式下,只有在特定目录中的外部程序才可以被执行,对其它程序的调用将被拒绝。这个目录可以在PhP.ini 文件中用safe_mode_exec_dir指令,或在编译PHP是加上--with-exec-dir选项来指定。
当你使用这些函数来执行系统命令时,可以使用escapeshellcmd()和escapeshellarg()函数阻止用户恶意在系统上执行命令,escapeshellcmd()针对的是执行的系统命令,而escapeshellarg()针对的是执行系统命令的参数。这两个参数有点类似addslashes()的功能。
2)超时
当执行命令的返回结果非常庞大时,可以需要考虑将返回结果输出至其他文件,再另行读取文件,这样可以显着提高程序执行的效率。
如果要执行的命令要花费很长的时间,那么应该把这个命令放到系统的后台去运行。但在默认情况下,象system()等函数要等到这个命令运行完才返回(实际上是在等命令的输出结果),这肯定会引起PHP脚本的超时。解决的办法是把命令的输出重定向到另外一个文件或流中,如:
<?php
system("/usr/local/bin/order_proc > /tmp/abc ");
?>
但我调用的DOS命令需要几分钟的时间,而且为了批处理不能简单的把结果写入文件了事,要顺序执行以下的程序
PHP设置了调用系统命令的时间限制,如果调用命令超时,虽然这个命令还是会被执行完,但PHP没有得到返回值,被终止了(最可恨的是,不显示任何错误)
修改php.ini并重启Apache以允许系统命令运行更长的时间
max_execution_time = 600
我的程序是后台运行的,逻辑OK就成了

❷ 怎样让PHP在DOS窗口下运行

是说PHP的CLI模式吗?

如果是话,先将php.exe 加入 环境变量 (不知道什么是环境变量的请自己搜索其他答案),然后就可以在 Dos 界面直接 运行:

phpxxx.php

❸ 请教如何在DOS下执行PHP页面

首先确保php能够在命令行执行,有两种方案:
1.
将php可执行文件所在的路径加到系统的PATH中去
2.
手动将当前目录切换到php可执行文件的文件夹
然后输入执行
php /f /path/to/file,其中
/f
代表解析执行文件

❹ PHP能不能执行DOS代码如果能,如何引入

可以,使世拦用exec、system等,例如exec("ping www..com");
但是这些函数一般默认会被禁碧州用,可以在php.ini里面找到disable_functions,将这些函数搜慧胡从disable_functions中删除后才可使用

❺ PHP代码运行DOS命令

执行运算哗枣符``
exec()

<?php
echo "<庆稿pre>";
echo `ping www..com`;
?>
复制了去试誉芦孝

❻ PHP怎么运行DOS命令

你的意思应该是在DOS环境下运行php命令。
首先,将php加入到环境变量path中。
然后,执行:php 你要执行的命令。

❼ 请教如何在DOS下执行PHP页面

打开 命令提示符 cmd.exe
进入PHP的安装目录,
输入 php.exe "abc.php"
则将在 DOS 下执行 abc.php

你可以将 abc.php 改成你的文件名, 注意目录结构
我这里直接使用 abc.php 是因为 abc.php 与 php.exe 是在同一个目录下

为了方便, 你也可以把 php 的安装目录加到环境变量 PATH 中
(右击我的电脑->属性->高级->环境变量, 如果存在 PATH 则在原来的 PATH 中加入你的PHP安装目录, 如果不存在则新建一个 PATH)

加入到环境变量后, 你就不用在 cmd 中进入到 php 的安装目录就可以
输入 php.exe "abc.php" (注意, 此时 "abc.php" 必须在你的 cmd 正在的目录中)

❽ 浅析Dos下运行php.exe,出现没有找到php

在php ini文件中将 extension=php_mbstring dll 移动到 extension=php_exif dll 之前

因为 exif 要调用 mbstring 所以 mbstring 必须在前面

php_exif dll EXIF 函数库 需要 php_mbstring dll

并且在 php ini 中 php_exif dll 必须在 php_mbstring dll 之后加载

lishixin/Article/program/PHP/201311/21063

❾ thinkphp5怎么通过系统DOS命令创建模块

目前tp5
在创建模块的时间没有3.0+的的自动创建然后加载。
tp5.0
需要
php
think
build
test

❿ php调用bat文件为什么不打开dos窗口

没有进行PHP代码的试验,仅提一点:

set path 在批处理命令里,其功用是设置系统环境变量的。雀握瞎

set path=C:\"Program Files (x86)"\FlashDevelop\FlashDevelop.exe

从你的说明来看,我觉得这应该是两行代码,而不是在一行里面顷空。

或者说,如果你只是想执行FlashDevelop.exe这个程序,可以直接用:皮局

"C:\Program Files (x86)\FlashDevelop\FlashDevelop.exe"

阅读全文

与php调用dos命令相关的资料

热点内容
pdfplus 浏览:577
汇编O命令 浏览:970
plt转pdf 浏览:364
魔兽60宏命令大全 浏览:478
php志愿者网站源码 浏览:874
贸易pdf 浏览:497
dbug命令 浏览:351
开逛app如何加好友 浏览:960
ftpdos命令下载文件 浏览:75
华为如何打开语音服务器 浏览:243
python中的idle 浏览:1000
五轴联动数控编程 浏览:965
换一台电脑如何远程云服务器 浏览:133
阿里云怎么买云服务器 浏览:665
java提取文字 浏览:97
阿里云服务器同人账号问题 浏览:421
5分钟解压轴题 浏览:341
安卓桌面二级文件夹 浏览:188
eps文档加密 浏览:261
手机怎么做pdf 浏览:162