exec 总是返回 -1 (或 127)

2024-01-05

我在生产服务器上使用 php 5.2.9,并且 exec() 函数的行为似乎是“非标准”。

如果我跑exec("ls", $output, $return_var) then $output将按预期包含当前文件夹中的文件列表,但是$return_var将被设置为 -1 而不是 0,如预期的那样。 我正在使用$return_var确定命令在何处成功完成,并且在测试的所有其他服务器上都按预期工作:)

有人遇到过这样的情况吗?


edit:

<?php
$command = "asd";

$t1 = time();

$output = Array();
$result = -5;
$r = exec($command, $output, $result);
$t2 = time();

echo "<pre>";
var_export(Array(
    'command'=>$command,
    'result'=>$result,
    'output'=>implode("\n", $output),
    'r'=>$r,
    't2-t1'=>$t2-$t1,
));
echo "</pre>";

无论我输入什么命令$command, $result即使对于不存在的命令也永远是-1...这很奇怪


假设返回 $result == -1 的系统是基于 Unix 的(我不知道使用相同代码的 Windows 会如何表现)

PHP (5.2.9) exec() 函数不会调用 C exec() 原语(如果无法替换/执行进程,则返回 -1,但此处情况并非如此)。相反,它调用 popen() 创建管道,执行 fork() 并使用您的命令执行 shell。 return_value -1 不是 C 原语的直接结果,而是由 PHP 内部构建的,具体取决于命令的处理方式。换句话说,“ls”命令可能已经执行得很好,但例如 PHP 无法正确关闭管道。

查看 ext/standard/exec.c 中的 C 代码,返回码为 -1 的原因可能有两个,由错误触发;第二个发生在 popen() 调用之后

  fp = VCWD_POPEN(cmd_p, "r");

  if (!fp) {
       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to fork [%s]", cmd);
       goto err;
  }
  // ...
  err:

  pclose_return = -1;
  goto done;

但是在这种情况下,您将看不到结果,并且日志将显示错误。

稍后,通过以下行设置 return_value

  pclose_return = php_stream_close(stream);

查看 _php_stream_free() (php_stream_close() 是一个被 _php_stream_free() 替换的宏),最有可能返回 -1 的候选者是

  ret = stream->ops->close(stream, preserve_handle ? 0 : 1 TSRMLS_CC);

它又间接调用 C 原语 pclose()。根据说明书

如果 wait4(2) 返回错误或检测到其他错误,则 pclose() 函数返回 -1。

关闭管道期间似乎检测到错误,但这并不妨碍设置结果数据。要严格查找原因,需要检查操作系统设置和日志、PHP配置和编译参数。

我会推荐

  • 为您的操作系统应用补丁,并可能更新到更新的版本(如果适用),
  • 将 PHP 更新到 5.3.3(目前最新),因为 PHP exec() 代码发生了显着变化。

请注意,版本 5.3 中存在与 PHP suhosin 模块相关的更改,默认情况下增强了运行 PHP 文件时的安全性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

exec 总是返回 -1 (或 127) 的相关文章

  • 向 Laravel 的 Mailer 添加新的传输驱动程序

    我需要向 Laravel 的邮件包添加一个新的传输驱动程序 以便我可以通过默认情况下不支持的外部服务 Mailjet 发送电子邮件 编写传输驱动程序不会成为问题 但我找不到一种方法来连接并添加新的驱动程序 以便我可以继续正常使用 Larav
  • dayname(curdate()) 不适用于 codeigniter php

    此 sql 在 phpmyadmin 中有效 但在 codeigniter php 中无效 function getProgramsHomepage data array this gt db gt select p name p star
  • PHP 不使用“json_decode()”转换 JSON

    我有一段非常简单的代码 pc1 POST post code1 pc2 POST post code2 url http maps google com maps nav q from pc1 20to pc2 url data file
  • 我应该存储密码的哈希值吗?

    用户系统和密码 我正在查看 MD5 内容 我想知道密码的正常 良好做法是什么 现在 我认为人们对密码进行超级加密并存储哈希值 如果是这样 密码检查如何工作 我只是让输入的密码再次经过加密过程 然后用存储的哈希值检查哈希值 对吗 这个问题可能
  • Windows CE 与嵌入式 Linux [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 现在我确信我们都清楚 Linux 与 Windows 桌面的相对优点 然而 我对嵌入式开发世界的了解却少得多 我主要对行业解决方案感兴
  • 高效的内存屏障

    我有一个多线程应用程序 其中每个线程都有一个整数类型的变量 这些变量在程序执行期间递增 在代码中的某些点 线程将其计数变量与其他线程的计数变量进行比较 现在 我们知道在多核上运行的线程可能会无序执行 一个线程可能无法读取其他线程的预期计数器
  • PHP 邮件结果错误:“标头丢失”

    我已经使用 php 邮件表单有一段时间了 现在它无法在新网站上运行 出现以下错误结果 PHP 警告 mail function mail sendmail from 未在 php ini 中设置 或第 16 行 E home mypagef
  • PHP 中的数组按值排序并维护索引关联

    我有一个数组 array array john gt 2 adam gt 3 ben gt 10 tim gt 1 我已经尝试了 PHP 的各种函数来实现这个数组结构 array array tim gt 1 john gt 2 adam
  • 如何查询X11显示分辨率?

    这似乎是一个简单的问题 但我找不到答案 如何查询 通过 X11 存在哪些监视器及其分辨率 查看显示宏 http tronche com gui x xlib display display macros html and 屏幕宏 http
  • 在 Mac OSX 上交叉编译 x86_64-unknown-linux-gnu 失败

    我尝试将我的 Rust 项目之一编译到 x86 64 unknown linux gnu 目标 cargo build target x86 64 unknown linux gnu Compiling deployer v0 1 0 fi
  • 监控子进程的内存使用情况

    我有一个 Linux 守护进程 它分叉几个子进程并监视它们是否崩溃 根据需要重新启动 如果父进程可以监视子进程的内存使用情况 以检测内存泄漏并在超出一定大小时重新启动子进程 那就太好了 我怎样才能做到这一点 您应该能够从 proc PID
  • 如何在 WordPress 中设置发布日期的格式?

    我有一个侧边栏 我想在其中显示最新的帖子 现在它显示标题 日期和摘录 日期显示了我想要删除的时间 我用这个显示日期 recent post date
  • Zoopla 沙箱出现 cURL http 标头错误

    我正在为房地产经纪人开发代码 以通过他们的数据源将房产上传到 Zoopla 我在将所需的配置文件添加到所需的 http 标头时遇到问题 文档中唯一的示例是来自 Linux 的测试 echo branch reference test cur
  • WooCommerce:返回特定类别中所有产品 ID 的函数

    我认为问题的标题是相当不言自明的 但要详细说明 我正在尝试在 Woocommerce 中制作自定义类别页面 我需要的是返回特定类别中的所有产品 ID 我见过这个帖子 https stackoverflow com questions 210
  • Capistrano 3 部署无法连接到 GitHub - 权限被拒绝(公钥)

    我使用 Capistrano v3 和 capistrano symfony gem 设置了以下部署脚本 我正在使用 Ubuntu 14 4 部署到 AWS EC2 实例 我正在连接从 AWS 下载的 pem 文件 我的deploy rb中
  • 用于验证网络路径的正则表达式 PHP、jQuery、JavaScript、Ruby

    尝试找出用于验证网络路径的正则表达式 即 comp xyz or comp or comp x y z storage或者所有部分都更长的东西 但希望能够传达其要点 我目前拥有的是一个简单的输入字段 用户可以通过它传递信息 事情是我不希望他
  • 回显并打印声明

    假设有以下代码
  • PHP - 调整 PNG 图像大小时出现内存错误

    我有一个脚本可以根据上传的图像创建缩略图 它对 jpg 工作正常 但给我一个错误 致命错误 允许的内存大小 67108864 字节已耗尽 尝试分配 26250000 字节 当我上传 png 图像时 脚本是 create thumbnail
  • PHP 会话未保存

    我把这句话写在我网站每一页的第一行 include restd php 和restd php包含以下几行 session start if isset SESSION id else header location index php 我面
  • 使用 Laravel 和 Eloquent 从表中选择全部

    我正在使用 Laravel 4 设置我的第一个模型 以从名为的表中提取所有行posts 在标准 MySQL 中我会使用 SELECT FROM posts 如何在 Laravel 4 模型中实现这一目标 我的完整模型源代码如下

随机推荐

  • TFS 到 TFS 迁移工具 - 域问题

    第三方为我们开发了一些应用程序 并一直使用 MS Team Foundation Server 2008 进行源代码控制 我的公司最近设置了 TFS 2008 环境 我们正在尝试将源代码从第 3 方开发人员 TFS 迁移到我们的 TFS 机
  • SQL 不断收到 ON UPDATE CASCADE 错误

    大家好 我正在使用这个 ON UPDATE CASCADE 功能 但我仍然无法让它工作 我的第一张桌子 CREATE TABLE Stab Stab id int not null Sprache VARCHAR2 2000 Vorname
  • Swift 保留周期和闭包

    我尝试做很多研究来理解保留周期 但我似乎在我的例子中找不到任何东西 我确实知道 如果我将属性设置为闭包 则会发生保留周期 并且需要使用弱或无主 但我有两个例子 我想知道它们是否正确完成 提前致谢 我已经尝试查看它们是否已经在 stackov
  • jest.toHaveBeenCalledWith 中松散匹配一个值

    我有一个分析跟踪器 它只会在 1 秒后调用 并且带有一个对象 其中intervalInMilliseconds 持续时间 值为not确定性的 我该如何使用jest toHaveBeenCalledWith测试对象 test pageStat
  • 有没有办法在非模板类中定义模板成员?

    假设我有一个名为的类模板Compute 和另一个名为Function A使用成员函数模板 template
  • Laravel 4 - 显示带有旧数据输入以及数据库信息的编辑表单

    我正在为我的应用程序制作一个编辑表单 我想知道是否有人可以告诉我如何将数据库中的数据获取到我的文本字段中 我可以根据用户的点击找到我需要编辑的记录 如果我执行以下操作 我可以显示信息 value letter gt subject 但是 我
  • C# WPF 即使在最小化时也捕获 keydown

    我想知道如何让我的应用程序捕获任何 keydown keyup 即使应用程序表单最小化也是如此 假设程序最小化 然后用户按 A 将出现一个弹出控件 请注意 我的程序可以运行 但在最小化时不能运行 谢谢 你需要的是HotKeys 没有内置的
  • 从父框架中的 iframe 打开锚标记

    给定以下 HTML iframe 中的锚标记是否可以定位父窗口 div div iframe pageview html 内容 a href http www google com link a 你想要的target属性 https dev
  • 移动应用商店分析选项(Apple、Android、OVI 等)? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有人有移动应用商店分析软件 服务的经验吗 我目前只为 iOS 开发 所以这是我主要感兴趣的 但是我想知道
  • 在 Feign 客户端中使用 spring 表单编码器时,请求正文未正确编码和隐藏

    我已经为 spring open feign 添加了必要的依赖项 如中提到的https github com OpenFeign feign form https github com OpenFeign feign form并遵循上述 f
  • 如何在两个表格之间添加垂直线?

    这是标记 我想在两个表格之间添加一条垂直线 我不想在这里使用图像 我需要一个纯 html 解决方案 div table width 50 tr td p class dotted row 1 cell 1 p td td p class d
  • PgAdmin 的 Kubernetes 持久卷挂载

    我正在尝试为我的 pgadmin 部署创建持久卷声明 以便在每次从 CD 管道部署后推出更新时可以保留我的设置 服务器等 在我的日志中 我收到以下错误 2020 10 05 00 54 56 0000 91 INFO Worker exit
  • Angular2:如何向应用程序注入没有装饰器的服务?

    当尝试使用时Http在 App 组件 我们正在引导的组件 中一切正常 找到 export default class AppComponent constructor public http Http console log this ht
  • 删除 MagicalRecord 中的实体不会持久

    我在使用 MagicalRecord 时遇到了一个奇怪的问题 删除不会持久 当我删除时 NSFetchedResultsControllerDelegate 正确地看到该对象已被删除 但是 如果我关闭并重新打开应用程序 该实体就会重新出现
  • Executor 上的 AsyncTask 和 PriorityBlockingQueue 实现问题

    在浪潮中这个问题 https stackoverflow com questions 12039596 asynctask on executor and priorityblockingqueue并有许多提示另一个 https stack
  • 测量计时器的精度(例如秒表/QueryPerformanceCounter)

    鉴于StopwatchC 中的类可以在下面使用三个不同的计时器 例如 系统定时器例如精度约 10 ms取决于可以设置的定时器分辨率timeBeginPeriod https msdn microsoft com en us library
  • plot.new尚未被调用

    为什么会发生这种情况 plot x y yx lm lt lm y x lines x predict yx lm col red 错误于plot xy xy coords x y type type plot new尚未被调用 某些操作
  • C# 解码(解压缩)PDF 文件的 Deflate 数据

    我想在 C 中解压缩一些 DeflateCoded 数据 提取的 PDF 不幸的是 我每次都会遇到异常 解码时发现无效数据 但数据是有效的 private void Decompress FileStream fs new FileStre
  • Number::toString() 抽象操作

    我试图理解如何数字 toString x https 262 ecma international org 11 0 sec numeric types number tostring抽象操作有效 据我所知 其要点似乎是非常大 n gt 2
  • exec 总是返回 -1 (或 127)

    我在生产服务器上使用 php 5 2 9 并且 exec 函数的行为似乎是 非标准 如果我跑exec ls output return var then output将按预期包含当前文件夹中的文件列表 但是 return var将被设置为