我有以下.c文件:Ç - 获得.c文件的路径
/home/eamorr/project1/eamorr.c
我编译罚款和exe文件在位于:
/home/eamorr/project1/a.out
现在,我有一个PHP文件在:
/home/eamorr/project1/a/b/c/eamorr.php
它需要调用a.out
<?php
$cmd=__DIR__."../../../a.out";
$result=`$cmd`;
?>
这里的eamorr.c
程序:
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main (int argc, char *argv[]){
setuid (0);
char temp[2048];
char pwd[1024];
realpath(argv[0],pwd);
sprintf(temp,"/bin/bash %s/doMagic.sh",pwd);
system((char *)temp);
return 0;
}
不幸的是,PWD变量包含错误的道路!
/home/eamorr/project1/a.out/doMagic.sh
如何摆脱从路径a.out的位?我没有在C程序很多时候,我已经在这个超过现在一个小时......
在调用程序并避免所有目录欺骗之前,您可能会考虑从PHP执行chdir。 –
我使用C的原因是因为我需要一个Web用户来执行特权程序。是的,我知道...用户通过身份验证,用户被限制在IP范围内。 – Eamorr
我没有说不使用C程序。你可以在执行C程序之前先执行'chdir()',然后调用'。/ doMagic.sh'而不是用完整路径尝试前缀。 –