Веб-сервер Android cgi записывает файлы и загружает Perl-скрипты

Я хочу иметь возможность запускать приложение cgi на своем планшете Samsung Galaxy под управлением Android 3.2. Я установил GroomDroid, SL4A и PerlForAndroid.
Я поместил файл margin.conf в каталог /sdcard и запустил GroomDroid.

Я помещаю свои сценарии perl в папку /data/perlapp и делаю файлы perl исполняемыми, а родительскую папку доступной для записи.

Все, что делают файлы, это запуск операторов печати. Когда я обращаюсь к Perl-скриптам, жизнь прекрасна. Я вижу веб-страницу, как и ожидалось, точно так же, как на компьютере.

Теперь, если я попытаюсь создать файлы из сценариев perl, я получаю ошибку ввода-вывода HTTP 506.

Любые идеи, почему я бы получить это?

Я не могу заставить оператор require работать, даже если файлы perl находятся в одном каталоге.

Любая помощь здесь очень ценится.


Код, который я пытаюсь запустить:

#!/data/data/com.googlecode.perlforandroid/files/perl/perl

print "Content-type: text/html\r\n\r\n";
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"w3.org/TR/html4/loose.dtd\""; 
print "<html><body style=\"font-family: arial; margin: 20px;\"><span style=\"color:red; font-weight: bold; padding-right: 10px;\">"; 

eval { 
    open(FILE, ">>/data/scwi/data/temp.cgi") or print $!;
    print FILE "respondent 1\n";
    close(FILE); 
}; 
print $!; 
if ($!) { 
    print "Error"; 
} else {
    print "Success";
} 
print "</span></body></html>";

person Mike Lodder    schedule 14.02.2012    source источник
comment
Проверяете ли вы возвращаемые значения ваших системных вызовов (open и т. д.)? Вы проверяете значение $! (и, возможно, $^E)?   -  person mob    schedule 15.02.2012
comment
У меня есть оператор open в блоке eval, после чего я проверяю $@. $@ пусто.   -  person Mike Lodder    schedule 15.02.2012
comment
Все, что доказывает, это то, что ваш оператор open имеет допустимый синтаксис, а не то, что он был успешным. Проверьте возвращаемое значение и проверьте $!.   -  person mob    schedule 15.02.2012
comment
Он возвращает «Не пишущая машинка». Это не имеет никакого смысла.   -  person Mike Lodder    schedule 15.02.2012
comment
Вот перл-скрипт. #!/data/data/com.googlecode.perlforandroid/files/perl/perl print Тип содержимого: text/html\r\n\r\n; print ‹!DOCTYPE HTML PUBLIC \-//W3C//DTD HTML 4.01 Transitional//EN\ \w3.org/TR/html4/loose.dtd\; print ‹html›‹body style=\font-family: arial; поле: 20px;\›‹span style=\color:red; вес шрифта: полужирный; padding-right: 10px;\›; eval { open(FILE, ››/data/scwi/data/temp.cgi) или print $!; напечатать ФАЙЛ респондента 1\n; закрыть (ФАЙЛ); }; напечатать $!; если ($!) { печать Ошибка; } еще { успех печати; } print ‹/span›‹/body›‹/html›;   -  person Mike Lodder    schedule 15.02.2012
comment
Not_a_typewriter   -  person mob    schedule 15.02.2012
comment
Я удаляю запись в файл и пытаюсь распечатать, но все еще получаю сообщение об ошибке ввода-вывода HTTP 506.   -  person Mike Lodder    schedule 16.02.2012


Ответы (2)


У меня такая же проблема. Решается редактированием конфига жениха.

поместите скрипты в папку cgi-bin на карте.

убедитесь, что расширение скрипта cgi или pl указано в конфиге грумера, и оба они обрабатываются грумером cgihandler, также убедитесь, что groom.conf имеет scard/cgi-bin в качестве каталога хоста, т.е. localhost:8080 на самом деле будет указывать прямо на scard/cgi-bin

person mj newbee    schedule 27.04.2012

Вы пытаетесь записать файл в каталог /data/.

Вы уверены, что у вас есть доступ для записи в этот каталог?

  • Во-первых, попробуйте записать в каталог /sdcard/, он доступен для записи всем.

  • Затем проверьте, достаточно ли у вас прав для записи в каталог, используя функцию stat().

person XcinnaY    schedule 28.02.2012