すべての実行で入力が同じであるにもかかわらず、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;
}