【问题标题】:Problem in retrieving the ini file through web page通过网页检索ini文件的问题
【发布时间】:2011-01-10 07:21:46
【问题描述】:

我正在使用 .ini 文件来存储一些值并使用 iniparser 从中检索值。

当我给出(硬编码)查询并通过命令行检索值时,我能够检索 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 文件发送请求,它们就可以正常工作。

如何解决?

【问题讨论】:

  • 你能打印出datastrlen(data)的值吗(如果data不是NULL的话)?
  • 我能够得到字符串并且它不为空。它与下面的硬编码示例相同:“/cgi-bin/set.cgi?pname=x&value=700&url=IP/home.html

标签: c ini


【解决方案1】:

也许您对 URL 参数的编码有问题?您不能只通过 URL 传递任意字符串 - 有些字符必须进行编码。阅读有关URL encoding 的页面。

在您的 C 程序中显示 data 字符串的值可能对解决您的问题有很大帮助。


更新:

当您的程序被 Web 服务器调用或由您直接调用时,您的程序在何处执行可能会有所不同。您确定它正在使用相同的“当前目录”执行。可能是不同的,因此当您尝试打开 ini 文件时会失败。尝试打印出当前目录(即使用getcwd 函数)并比较两种情况。

【讨论】:

  • 同一种东西可以与另一个 .ini 文件一起用于不同的操作。 url 编码是否真的很重要?
  • @MalarN:我不知道——有可能。您没有提供足够的信息来帮助您。生成显示问题的最小示例,并为我们提供 C 代码和 .ini 文件以及 .html 页面
  • @MalarN:好的,我已经更新了答案以反映新信息
  • 我尝试打印当前目录,它打印正确。当我在命令提示符下运行时,我会将所有文件放在 /var/www/html 文件夹中。现在当使用 html,cgi 我使用 /var/www/cgi-bin 目录。我已将 .cgi、.ini 文件放在这里。我可以从同一位置再检索一个 ini 文件,但不能从这个文件中检索。
猜你喜欢
  • 1970-01-01
  • 2019-09-09
  • 2020-12-29
  • 1970-01-01
  • 2012-05-17
  • 2019-04-04
  • 2023-03-23
  • 2012-04-18
  • 2011-06-22
相关资源
最近更新 更多