Как настроить cgi для php5-apache [duplicate]

Решено это с рекурсией:

def get(d,l):
    if len(l)==1: return d[l[0]]
    return get(d[l[0]],l[1:])

Используя ваш пример:

dataDict = {
    "a":{
        "r": 1,
        "s": 2,
        "t": 3
        },
    "b":{
        "u": 1,
        "v": {
            "x": 1,
            "y": 2,
            "z": 3
        },
        "w": 3
        }
}
maplist1 = ["a", "r"]
maplist2 = ["b", "v", "y"]
print(get(dataDict, maplist1)) # 1
print(get(dataDict, maplist2)) # 2
39
задан Peter Mortensen 31 December 2016 в 22:18
поделиться

8 ответов

Для таких, как я, которые нащупывали ваш путь через многозадачные учебники и документы, но я просто хочу увидеть, что работает для стартеров, я нашел единственное мне нужно было добавить:

AddHandler cgi-script .pl .cgi

К моему конфигурационному файлу.

http: // httpd .apache.org / docs / 2.2 / mod / mod_mime.html # addhandler

Для моей ситуации это работает лучше всего, так как я могу поместить свой скрипт perl где угодно, и просто добавлю .pl или .cgi.

Ответ Дейва Шеохмана также упоминает решение AddHandler.

Конечно, вы все равно должны убедиться, что права / права на ваш скрипт установлены правильно, особенно, что скрипт будет исполняемым. Обратите внимание, кто «пользователь» при запуске из HTTP-запроса, например, www или www-data.

0
ответ дан Allasso 18 August 2018 в 20:37
поделиться

Если вы успешно установили веб-сервер Apache и Perl, выполните следующие шаги для запуска скрипта cgi с использованием perl в системах ubuntu.

Перед началом работы с CGI-скриптами необходимо настроить сервер Apache в таком способ, которым он распознает каталог CGI (где сохраняются программы cgi) и разрешает выполнение программ в этом каталоге.

  1. В каталоге Ubuntu cgi-bin обычно находится в пути / usr / lib , если нет, создайте каталог cgi-bin, используя следующую команду .cgi-bin должен находиться в этом пути.
     mkdir /usr/lib/cgi-bin
    
  2. Выполните следующую команду, чтобы проверить статус разрешений в каталоге.
     ls -l /usr/lib | less
    

Проверьте, выглядит ли разрешение «drwxr-xr-x 2 root root 4096 2011-11-23 09:08 cgi- bin», если да, переходите к шагу 3.

Если не выполнить следующую команду для обеспечения соответствующего разрешения для нашего каталога cgi-bin.

     sudo chmod 755 /usr/lib/cgi-bin
     sudo chmod root.root /usr/lib/cgi-bin
  1. Предоставить разрешение на выполнение для каталога cgi-bin
     sudo chmod 755 /usr/lib/cgi-bin
    

Таким образом, ваш каталог cgi-bin готов к работе. Здесь вы накладываете все свои скрипты cgi на исполнение. Следующий шаг - настроить apache для распознавания каталога cgi-bin и разрешить выполнение всех программ в нем как cgi-скриптов.

Настройка Apache для запуска скрипта CGI с использованием perl

  1. Директива должна быть добавлена ​​в файл конфигурации сервера apache, чтобы он знал наличие CGI и местоположение его каталоги. Сначала перейдите в расположение файла конфигурации apache и откройте его с помощью вашего любимого текстового редактора
    cd /etc/apache2/sites-available/ 
    sudo gedit 000-default.conf
    
  2. Скопируйте приведенный ниже контент в файл 000-default.conf между строкой кодов «DocumentRoot / var / www / html / "и" ErrorLog $ {APACHE_LOG_DIR} /error.log "
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Require all granted
    
  3. Перезапустить сервер Apache со следующим кодом
    sudo service apache2 restart
    
  4. Теперь нам нужно включить модуль cgi который присутствует в более поздних версиях ubuntu по умолчанию
    sudo a2enmod cgi.load
    sudo a2enmod cgid.load
    
  5. . В этот момент мы можем перезагрузить веб-сервер apache, чтобы он снова считывал файлы конфигурации.
    sudo service apache2 reload
    

Конфигурационная часть apache завершена, теперь проверим ее с помощью программы cgi perl.

Тестирование

  1. Перейдите в каталог cgi-bin и создайте файл cgi с расширением .pl
    cd /usr/lib/cgi-bin/
    sudo gedit test.pl
    
  2. Скопируйте следующий код на test.pl и сохраните его.
    #!/usr/bin/perl -w
    print “Content-type: text/html\r\n\r\n”;
    print “CGI working perfectly!! \n”;
    
  3. Теперь дайте разрешение на выполнение test.pl.
    sudo chmod 755 test.pl
    
  4. Теперь откройте этот файл в своем веб-браузере http: //Localhost/cgi-bin/test.pl
  5. Если вы видите вывод «CGI работает отлично», вы готовы к работе. Теперь выгрузите все свои программы в каталог cgi-bin и начните их использовать.

Примечание. Не забудьте указать свои новые программы в cgi-bin, chmod 755, чтобы успешно запускать его без каких-либо внутренних ошибок сервера.

2
ответ дан Aparna Asok 18 August 2018 в 20:37
поделиться

(поиск Google привел меня к этому вопросу, хотя я не просил perl)

У меня была проблема с запущенными скриптами (хотя bash not perl). Apache имел конфигурацию ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/, однако журнал ошибок Apache показал File does not exist: /var/www/cgi-bin/test.html.

Пробовал помещать скрипт в оба /usr/lib/cgi-bin/ и /var/www/cgi-bin/, но ни один из них не работал.

После продолжительная сессия по поиску в Google, что взломало ее для меня, было sudo a2enmod cgi, и все встало на свои места с помощью /usr/lib/cgi-bin/.

12
ответ дан northern-bradley 18 August 2018 в 20:37
поделиться
  • 1
    Спасибо, на Debian 7 вам нужно запустить a2enmod cgi, иначе это не сработает. – Andrea Gottardo 5 January 2016 в 10:12
  • 2
    a2enmod cgi исправил это для меня тоже! Этот ответ действительно заслуживает большего количества голосов. – Saurabh 8 May 2016 в 19:43
  • 3
    Благодаря! Я не могу поверить, что дюжина других страниц, которые я нашел, никогда не упоминала об этом простом, маленьком, ВАЖНО. – Stefan Vorkoetter 25 January 2017 в 03:31

Существует два способа обработки сценариев CGI, SetHandler и AddHandler .

SetHandler cgi-script

применяется ко всем файлам в с учетом контекста , независимо от того, как они названы, даже index.html или style.css.

AddHandler cgi-script .pl

аналогичен, но применяется к файлам, заканчивающимся на .pl, в данный контекст. Вы можете выбрать другое расширение или несколько, если хотите.

Кроме того, модуль CGI должен быть загружен и Options +ExecCGI настроен. Чтобы активировать модуль, введите

a2enmod cgi

и перезапустите или перезагрузите Apache. Наконец, скрипт Perl CGI должен быть исполняемым. Поэтому бит выполнения должен быть установлен

chmod a+x script.pl

, и он должен начинаться с

#! /usr/bin/perl

в качестве первой строки.


Когда вы используете SetHandler или AddHandlerOptions +ExecCGI) вне любой директивы, он применяется глобально ко всем файлам. Но вы можете ограничить контекст подмножеством, включив эти директивы внутри, например. Directory

<Directory /path/to/some/cgi-dir>
    SetHandler cgi-script
    Options +ExecCGI
</Directory>

Теперь SetHandler применяется только к файлам внутри / path / to / some / cgi-dir, а не ко всем файлам веб-сайта. То же самое с AddHandler внутри директивы Directory или Location, конечно. Затем он применяется к файлам внутри / path / to / some / cgi-dir, заканчивающимся на .pl.

2
ответ дан Olaf Dietsche 18 August 2018 в 20:37
поделиться

Начиная с Ubuntu 12.04 (Precise Pangolin) (и, возможно, релиз или два раньше) просто устанавливают apache2 и mod-perl через Synaptic и помещают ваши CGI-скрипты в / usr / lib / cgi -bin - это все, что вам нужно сделать.

22
ответ дан Peter Mortensen 18 August 2018 в 20:37
поделиться
  • 1
    Большое спасибо :) .. Однако вместо httpd.conf мне пришлось внести изменения в / etc / apache2 / sites-enabled / default, а затем все сработало ... httpd.conf был пустым файлом. Любая причина, почему я не должен был вносить изменения в httpd.conf? – user 19 February 2009 в 08:29
  • 2
    Более "современные" способ обработки конфигураций состоит в том, чтобы поместить все в стаи частичных конфигурационных файлов (в разрешенных сайтах, с поддержкой модов и conf.d), чтобы программы могли более легко манипулировать ими. Когда вы это делаете, httpd.conf больше не нужен и может быть использован или нет. – Dave Sherohman 19 February 2009 в 22:01
  • 3
    Один миллион строк для запуска perl? – Dims 18 December 2014 в 18:21
  • 4
    Я не понимаю, шаги 5 и 6. Вы объясните, что это «очень важно». Вы даете команду AddHandler cgi-script .cgi .pl. Тогда есть блок кода. Где мы предположим, чтобы это точно? – cpb2 7 March 2015 в 16:32
  • 5
    Разве нет возможности развернуть .cgi на другой тип сервера? как puma: | – user 20 August 2016 в 13:25
  • 6
    Вау ... это выглядит сложным. Разве нет более простого пути? Похоже, изобретать колесо :( – gpwr 3 August 2017 в 07:12

Я предполагаю, что вы взглянули на mod_perl ?

Пробовали ли вы учебник ?

] EDIT: в отношении вашей публикации - возможно, вы могли бы включить образец кода в свой файл .cgi. Возможно, даже первые несколько строк?

1
ответ дан toolkit 18 August 2018 в 20:37
поделиться
22
ответ дан Peter Mortensen 7 September 2018 в 04:38
поделиться
22
ответ дан Peter Mortensen 30 October 2018 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: