فایل های CGI ، در سرور داخلی خطا ایجاد کرده اند

cgi files generate Internal Server Error

این بدان معنی است که اسکریپت فایل های CGI به درستی اجرا نشده است .

دلایل متعددی وجود دارد که ممکن است موجب بوجود آمدن این ارور شود . پس باید چند چیز کوچک را بررسی کنیم .

the /var/log/httpd/suexec_log را بررسی کنید . این شامل هر گونه خطایی می شود که نتیجه آن عدم دسترسی صحیح به پرونده است . فایل باید در یک cgi-bin باشد وباید owner/group ی داشته باشد ، به عنوان نام کاربری ای که مالک سایت است . اگر این فایل متعلق به هر کس دیگری باشد، اجرا نخواهد شد.

همچنین، اسکریپت باید اجازه اجرا داشته باشد . معمول ترین سطح دسترسی 755 است .

به تمام دایرکتوری ها بروید و مطمئن شوید که سطح دسترسی یا پرمیژن 755 است (اگر public_html یک گروه از آپاچی داشته باشد ، می تواند سطح دسترسی 750 داشته باشد ).

اگر suexec_log فقط اسکریپتی که اجرا شده است را نشان می دهد ، پس ممکن است مشکل در کد اسکریپت باشد .

ساده ترین راه برای فهمیدن مشکلات اسکریپت کدگذاری این است که ابتدا اسکریپت را از طریق ssh به صورت دستی اجرا کنید.

cd /home/username/domains/domain.com/public_html/cgi-bin
./script.cgi

یکی از خطاهای معمول استفاده از یک مترجم نادرست است. 2 تا از شایع ترین مترجمین عبارتند از :

#!/usr/bin/perl

و

#!/usr/local/bin/php

 

این کد باید در خط اول اسکریپت نمایش داده شود. گاهی اوقات فایل در فرمت ویندوز آپلود می شود ، بنابراین trailing newline character(بازگشت) اشتباه شکل گرفته می شود و فایل باید در قالب دیگری آپلود شود.

خطاهای دیگر که هنگام اجرای دستی اسکریپت در  ssh تولید می شود، موچب می شود  ماژول های perl از دست بروند ، در این صورت شما باید خودتان آن را نصب کنید.

Cpan ساده ترین روش برای نصب ماژول های پرل جدید است :

perl -e shell -MCPAN
install Bundle::DBD::mysql

و یا

perl -MCPAN -e 'install Bundle::DBD::mysql'