CGI调用system(cmd) 返回256的原因

这几天在做CGI页面的时候碰到一个问题。。

主要是通过cgi程序,调用linux里的shell脚本进行一些系统配置。


流程是这样的:

1.页面表单提交到页面 x.cgi

2.x.cgi 收到传递过来的参数后,生成调用 shell 脚本的命令 cmd

3.调用 system( cmd ) 函数,执行命令,如果成功返回0,失败返回错误码

4.根据 system( cmd ) 的执行结果,生成提示成功与失败的页面


经过测试,x.cgi 每次都是返回错误的结果,把system的返回值打印出来为256。但是在 linux 里,shell 脚本测试的结果(shell 脚本权限设置为755),每次都是成功,即返回0(用 “echo $?” 查看),说明 cgi 程序调用 system( cmd ) 应该返回0才是合理的。


这是权限的问题,但不是脚本文件执行权限的问题,而是因为脚本文件中,包含了一些root才能执行的命令,有脚本文件执行权限不等于有脚本文件中的所有命令的执行权限,所以对脚本文件 “chmod +s” 就解决了!


参考:http://www.cplusplus.com/reference/clibrary/cstdlib/system/

### 安装配置 IIS 和 PHP 环境 #### 准备工作 确保操作系统已更新至最新状态并安装必要的补丁。 #### 配置 IIS Web 服务器 通过“服务器管理器”,添加角色和服务向导来安装 Internet Information Services (IIS)[^1]。选择包括静态内容、默认文档在内的常用功能,以及 CGI 支持以便后续能够运行动态脚本语言如 PHP。 #### 下载与安装 PHP 访问官方网站下载适用于 Windows 的 Thread Safe 版本 ZIP 文件形式发布的 PHP 解释器。解压缩到指定目录下,并设置环境变量 PATH 包含此路径使得命令行可以全局调用 php.exe。 #### 启用 FastCGI 模块 为了提高性能,在 IIS 中推荐使用 FastCGI 方式处理 PHP 请求而不是传统的 CGI 方法。这一步通常不需要手动操作因为新版本的 IIS 默认已经包含了该组件;如果未找到则可以在控制面板中的“程序和功能 -> 启用或关闭 Windows 功能”里勾选“IIS -> 应用程序开发功能 -> CGI”。 #### 注册 PHP 到 IIS 创建一个新的文件 `php.ini` 并放置于之前解压出来的 PHP 文件夹内,根据实际需求调整各项参数设定。接着打开 PowerShell 或者 CMD 提权窗口执行如下命令注册 PHP 处理器给 IIS: ```powershell %windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCgi /+"[fullPath='D:\php-7.4.27-Win32-vs16-x64\php-cgi.exe',maxInstances='12']" ``` 上述例子假设 PHP 被安放在 D 盘根目录下的相应文件夹中,请依据实际情况修改路径字符串部分[^2]。 #### 测试 PHP 是否正常工作 建立一个简单的测试页面比如命名为 info.php ,其内容仅需一行代码即可: ```php <?php phpinfo(); ?> ``` 将其上传至网站根目录(通常是 inetpub/wwwroot),最后通过浏览器访问 http://localhost/info.php 来验证整个过程是否成功完成[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值