Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP';中使用mktime运行C代码;首席执行官_Php_C_Date_Mktime - Fatal编程技术网

在PHP';中使用mktime运行C代码;首席执行官

在PHP';中使用mktime运行C代码;首席执行官,php,c,date,mktime,Php,C,Date,Mktime,我对PHP和使用当前时间的C脚本有一个奇怪的问题。我的程序有点复杂,但问题仅限于此: 我有一个C代码,它打印1分钟前的日期、当前日期和1分钟后的日期: #include <time.h> #include <stdio.h> int main(int argc, char **argv){ char date[9]; time_t rawtime; struct tm * ptm; int i; time(&rawtime); ptm

我对PHP和使用当前时间的C脚本有一个奇怪的问题。我的程序有点复杂,但问题仅限于此:

我有一个C代码,它打印1分钟前的日期、当前日期和1分钟后的日期:

#include <time.h>
#include <stdio.h>

int main(int argc, char **argv){
  char date[9];
  time_t rawtime;
  struct tm * ptm;
  int i;

  time(&rawtime);
  ptm = gmtime(&rawtime);
  ptm->tm_min--;

  for(i = 0; i < 3; i++){
    rawtime = mktime(ptm);
    ptm = gmtime(&rawtime);
    snprintf(date, 9, "%d %d %d", ptm->tm_mday, ptm->tm_hour, ptm->tm_min);
    printf("%s\n", date);

    ptm->tm_min++;
  }
  return 0;
}
然而,当我通过PHP执行它时,我得到了奇怪的结果。这是PHP代码:

<?php
exec("path_to_exec/test", $output);
echo "$output[0]<br/>";
echo "$output[1]<br/>";
echo "$output[2]<br/>";
?>

时间显然错了。有人知道是什么导致了这种情况吗?

问题在于C代码,而不是PHP代码:

<?php
exec("path_to_exec/test", $output);
echo "$output[0]<br/>";
echo "$output[1]<br/>";
echo "$output[2]<br/>";
?>
执行此操作时:

rawtime = mktime(ptm);
rawtime = mktime(ptm);
ptm = gmtime(&rawtime);
ptm
指针由
mktime
功能修改。因此,如果您这样做:

rawtime = mktime(ptm);
rawtime = mktime(ptm);
ptm = gmtime(&rawtime);
实际上,您正在两次操作指针,因此产生了奇怪的结果

与上述操作不同,只需执行以下操作:

mktime(ptm);
snprintf(...);
你会得到预期的结果。因此,循环代码的完整
为:

mktime(ptm);
snprintf(date, 9, "%d %d %d", ptm->tm_mday, ptm->tm_hour, ptm->tm_min);
printf("%s\n", date);
ptm->tm_min++;

当你
var_dump($output)
时,你会得到什么?@jprofitt
array(3){[0]=>string(8)“17 17 17 40”[1]=>string(8)“17 14 41”[2]=>string(8)“17 11 42”}
你想用C获取日期信息的具体原因是什么?PHP的内置日期函数有什么问题?@NullUserExceptionఠ_ఠ 我的C程序更大,使用时间/日期来计算我想要的。我只是想在页面中显示结果,但结果是错误的,因为C代码中的时间是错误的(尽管在我使用shell时它们似乎是正确的)。谢谢。这就解决了问题。我不知道
mktime
修改了指针。但是为什么它在shell中工作而不是在PHP中工作?@nmat:老实说?不知道。一开始它根本不应该起作用。你的例子中可能遗漏了一些东西,我需要回答。不是真的。在这里发布之前,我实际上复制并粘贴了一个不同的文件,以确保发生了什么。我看到mktime的返回值是“从作为time\t类型的值编码的历元开始的指定时间”(如果我没有跳到“return value”部分,我也会读到它修改指针)。无论如何,我写的东西确实是多余的,但我认为不应该给出错误的结果……我想我必须检查汇编程序才能弄清楚。不用麻烦了。谢谢你的回答。