0

すべての実行で入力が同じであるにもかかわらず、CGI スクリプトの出力が不安定な理由がわかりません。

私はこの CGI スクリプト [in C]htmlを持っています。これは、ファイルシステム (Ubuntu) のツリー/階層ビューを再現するテーブルを持つページを生成します。これは、arm-platform で実行され、ミニ (lighthttpd で開発) です。スクリプトの /p は、ディレクトリ名とファイル名で満たされたテーブルです。私の問題は、実行時にそのテーブルのファイルシステム(ファイルとフォルダーのリスト)を正常にリストし、10分ほど後に実行するとファイルとフォルダーを含むテーブルが表示されず、入力を同じに保つことです(ファイルシステムおよびファイルは同じままです)[ブラウザにエラーメッセージError 324 (net::ERR_EMPTY_RESPONSE): The server closed the connection without sending any data. または空白のページが表示されるだけです。]

何が問題なのですか??サーバーでスクリプトを実行し、出力が有効なファイルとフォルダーへのパスを含む有効な HTML ページであり、それらがすべて存在することを確認しました。ただし、同じスクリプトでテーブルが正常に表示されることもあれば、上記のエラーのいずれかが表示されることもあります。これは許可の問題に関連しているのではないかと思いますが、もしそうなら、時々表示されるのはどうですか? 処理しているすべてのファイルとフォルダーのアクセス許可を完全に変更しましたが、それでも役に立ちません!!:(

スクリプトは次のとおりです...

#include <stdio.h>
#include <dirent.h>
#include <string.h>
int main()
{
  int dir_count = 0;
  int file_count = 0;
  int dir_index=0;
  int file_index=0;
  int inner_loop=0;
  int len=0;
  int i=0;
  DIR * dirp;
  DIR * dirp2;
  DIR * dirp3;
  char realbase[35]="/home";
  char final_report_path[30];
  char base[20];
  char source[20];
  char patient_id[15];
  char patient_name[15];
  int j=0;
  struct dirent * entry;
  char dir_name[500][20];
  char* file_name[500];
  dirp = opendir(realbase); 
  if(dirp)
  while ((entry = readdir(dirp)) != NULL) 
    {
             if (entry->d_type == DT_DIR) 
        { /* If the entry is a regular file */
                 if(entry->d_name[0]!='.' && entry->d_name[1]!='.')
            {
                 dir_count++;
                         strcpy(dir_name[dir_index++],entry->d_name);

            }
            }
    }
  closedir(dirp);
  printf("Content-type: text/html\n\n");
  printf("<html>\n");
  printf("<body>\n");
  printf("<h1>Blah Blah!!</h1>\n");
  printf("\n");
  printf("    \n");
  printf("Click on the links to view Reports\n");
  printf("    \n");
  printf("<table border=\"3\" bordercolor=\"#c86260\" bgcolor=\"#ffffcc\" width=\"50%\" cellspacing=\"5\" cellpadding=\"3\">\n");
  printf("<tr><td><b>Patient Name</b></td><td><b>Patient ID</b></td><td><b>Reports</b></td></tr>\n");
  for(i=0;i<dir_count;i++)
  {
   strncpy(source, "", sizeof(source));
   strncpy(base, "", sizeof(base));
   strncpy(patient_name, "", sizeof(patient_name));
   strncpy(patient_id, "", sizeof(patient_id));
   strcpy(source,dir_name[i]);
   if(source[0]!='.')
{
   strcpy(base,"/home");
                      for(len=0;len<sizeof(source);len++)
                    {
                        if(source[len]!='_')
                        patient_name[len]=source[len];
                        else
                        {
                                                len++;

                        break;
                        }
                    }
                 for(inner_loop=0;len<sizeof(source);len++,inner_loop++)
                    {
                        if(source[len]!='\0')
                        patient_id[inner_loop]=source[len];
                        else
                        {

                        break;
                        }
                    }
   printf("<tr><td valign=\"center\">%s</td>",patient_name);
   printf("<td valign=\"center\">%s</td>",patient_id);

   strcat(base,source);
   strcat(base,"/Reports/");

   dirp2 = opendir(base); 
   if(dirp2)
   while ((entry = readdir(dirp2)) != NULL) 
    {

             if (entry->d_type == DT_REG) 
        { /* If the entry is a regular file */
                 if(entry->d_name[0]!='.')
            {
                                 if(file_count==0)
                                 {
                                  printf("<td>");
                                 }
                                 if(file_count!=0)
                                 {
                                  printf("<br>");
                                 }
                 file_count++;
                         file_name[file_index++]=entry->d_name;

                 printf("<a href=\"/home/%s/Reports/%s\">",dir_name[i],file_name[file_index-1]);
                 printf("%s",file_name[file_index-1]);
                 printf("</a>");
            }
            }
    }
   if(file_count>0)
   printf("</td>");
   printf("</tr>\n");
   file_count=0;
   file_index=0;
   closedir(dirp2);
}
  }

  printf("</table>");

  printf("</body>\n");
  printf("</html>\n");
  return 0;
}
4

0 に答える 0