我撰寫了一個php的網頁
透過exec呼叫一個外部程式a.out
a.out裡頭執行了open file的動作
不管是用fopen() 還是ifstream.open()
原本不存在這個檔案 還是原本存在這個檔案
最後的結果都是open file fail!
讓我覺得很奇怪
明明直接由console執行這個a.out的程式
一切正常....open file success!!!
但是一透過php去執行它,開檔就會失敗....不知為何...
以下為php的code..
<?php
echo exec("/home/falldog/a.out");
?>
a.out的source code
#include <iostream>
int main(int argc, char** argv){
FILE * file = fopen("/home/falldog/aaa.txt","w");
if( file==NULL )
printf("open file error!!!n");
else
printf("open file success!!!n");
return 0;
}
試了很多次
最後才發現只要將路徑改為/tmp/就ok了
原來…透過php去呼叫a.out
可能牽涉到檔案目錄權限問題...因為/home/falldog/底下不為php網頁的權限目錄
因此,開檔時,會有錯誤發生
所以只要將這個暫存檔開啟在/tmp/就不會發生這樣的問題了
3 則留言:
大大 能在詳細敘述 一下您的檔案過程
因為我看了還是 試不出來
要注意,在Linux底下,假設是透過Apache執行PHP的話,Apache應該會有個user id/name,可能叫WWW還是什麼的吧。
要確認這個WWW的user id有沒有權限讀取你指定的目錄,因為PHP的執行就是透過這個WWW的user。
所以才說/tmp才能被執行,因為/tmp的權限比較寬鬆
張貼留言