2010-01-28 52 views
1

我正在使用.ini文件來存儲一些值,並使用iniparser從中檢索值。通過網頁檢索ini文件的問題

當我給(硬編碼)查詢並通過命令行回收值時,我能夠檢索ini文件並執行一些操作。

但是,當我通過HTTP傳遞查詢,然後我得到一個錯誤(找不到文件),即無法加載ini文件。


  • 命令行:

int main(void) 
{ 
    printf("Content-type: text/html; charset=utf-8\n\n"); 

    char* data = "/cgi-bin/set.cgi?pname=x&value=700&url=http://IP/home.html"; 

    //perform some operation 
} 

  • 通過http:

的.html

function SetValue(id) 
{ 
    var val; 
    var URL = window.location.href; 
    if(id =="set") 
    { 
     document.location = "/cgi-bin/set.cgi?pname="+rwparams+"&value="+val+"&url="+URL; 
    } 
} 

  • .C

int * Value(char* pname) 
{ 
    dictionary * ini ; 
    char *key1 = NULL; 
    char *key2 =NULL; 
    int i =0; 

    int val; 

    ini = iniparser_load("file.ini"); 
    if(ini != NULL) 
    { 
     //key for fetching the value 
     key1 = (char*)malloc(sizeof(char)*50); 
     if(key1 != NULL) 
     {     
       strcpy(key1,"ValueList:"); 
       key2 = (char*)malloc(sizeof(char)*50); 
       if(key2 != NULL) 
       { 
        strcpy(key2,pname); 
        strcat(key1,key2);     
        val = iniparser_getint(ini, key1, -1); 
        if(-1 == val || 0 > val) 
        { 
         return 0;      
        } 
       } 
       else 
       { 
        //error 
        free(key1);      
        return; 
       }   
     }  
     else 
     { 
      printf("ERROR : Memory Allocation Failure "); 
      return; 
     } 

    } 
    else 
    { 
     printf("ERROR : .ini File Missing"); 
     return; 
    } 
    iniparser_freedict(ini); 
    free(key1); 
    free(key2); 
    return (int *)val; 
} 

void get_Value(char* pname,char* value) 
{ 
     int result =0;       
     result = Value(pname); 
     printf("Result : %d",result);   
} 

int main(void) 
{ 
    printf("Content-type: text/html; charset=utf-8\n\n"); 

    char* data = getenv("QUERY_STRING");  
    //char* data = "/cgi-bin/set.cgi?pname=x&value=700&url=http://10.50.25.40/home.html"; 

    //Parse to get the values seperately as parameter name, parameter value, url 

    //Calling get_Value method to set the value 
    get_Value(final_para,final_val); 

} 

*

  • file.ini

*

[ValueList] 

x = 100; 
y = 70; 

當請求是通過HTML網頁發送,我總是得到.ini文件丟失。如果直接從C文件發送請求,它可以正常工作。

如何解決這個問題?

+1

你可以打印'data'和'strlen(data)'的值嗎(如果'data'不是'NULL')? – 2010-01-28 07:18:55

+0

我能夠得到的字符串,它不是null。 它與下面的硬編碼示例一樣: 「/cgi-bin/set.cgi?pname=x&value=700&url=http://IP/home.html」 – MalarN 2010-01-28 07:44:00

回答

0

也許你有一個URL參數編碼的問題?你不能只通過一個URL傳遞任何字符串 - 有一些字符必須被編碼。閱讀此頁面關於URL encoding

顯示C程序中data字符串的值可能對解決您的問題很有幫助。


更新:

有可能是在何處由Web服務器或直接由你什麼時候叫你的程序執行的差異。你確定它正在執行相同的「當前目錄」。機會有所不同,因此當您嘗試打開ini文件時失敗。嘗試打印出當前目錄(即使用getcwd函數)並比較兩種情況。

+0

同樣的一種東西與另一個.ini文件適用於不同的操作。是否,它真的與URL編碼有關? – MalarN 2010-01-28 07:46:46

+0

@MalarN:我不知道 - 這是可能的。你沒有提供足夠的信息來幫助你。生成顯示問題的最小示例,併爲我們提供C代碼和.ini文件以及.html頁面 – 2010-01-28 07:53:40

+0

我已添加附加信息。 – MalarN 2010-01-28 08:51:27