Alex的博客

本博客的文章均为原创,是本人从事行业多年来所遇见一些小问题的解决心得,希望可以帮助到大家!



php dos编程exec 注意事项

用exec函数的时候运行命令部分需要填写windows命令的完整路径,之前做一个监听端口然后把接受到的字符串通过msg 命令来弹出窗口的程序开始死活弹不出消息框,折腾了好久终于找到问题了,当以php运行命令的时候所使用到的环境变量好像是不一样了,system32里面 明明有msg.exe 但是运行就是死活找不到这个文件说不是内部或外部命令,最后在里面 dir /s 终于找到了一个路径为C:\Windows\winsxs\amd64_microsoft-windows-t..commandlinetoolsmqq_31bf3856ad364e35_6.1.7600.16385_none_851e6308c5b62529\msg.exe的

然后把这个路径写上去后就正常了。

好吧发上来做个备忘顺便提醒一下碰到这种问题的朋友

下面我把我的提醒程序源代码也一并贴出来吧!

server端代码:

<?php
$host = "127.0.0.1";
$port = 1234;
set_time_limit(0);
$socket = socket_create(AF_INET, SOCK_STREAM, 0);
$result = socket_bind($socket, $host, $port);
$result = socket_listen($socket, 3);
do{
$spawn = socket_accept($socket);
$input = socket_read($spawn, 1024);
if ($input){
exec("cmd.exe /c C:\Windows\winsxs\amd64_microsoft-windows-t..commandlinetoolsmqq_31bf3856ad364e35_6.1.7600.16385_none_851e6308c5b62529\msg.exe * $input");
}
$output = strrev($input) . "\n";
//socket_write($spawn, $output, strlen ($output));
$xx="消息已经收到" . "\n";
socket_write($spawn, $xx, strlen ($xx));
if ($input=="quit") {
break;
}
} while(true);
socket_close($spawn);
socket_close($socket);

?>

客户端代码:

<?php
$host = "127.0.0.1";
$port = 1234;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($socket, $host, $port);
$name=$argv['1'];
$in = $name."\r\n";
socket_write($socket, $in, strlen($in));
echo $out = socket_read($socket, 8192);

?>

用法:

先运行php server.php

开始监听1234端口

 

然后运行php client.php freewind

然后本地就会弹出信息框内容为freewind

提供给需要的朋友

如果还不清楚在dos下怎么运行php的建议去看一下我前面的文章,有提到的!

打完收工!

浏览1088  评论0  Alex于 2013-12-11 16:54
发言