我有以下.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'而不是用完整路徑嘗試前綴。 –