Подключение Perl/CGI скрипта к пхп скрипту

Тема в разделе "PHP", создана пользователем PHPCod3r, 16 июн 2011.

Модераторы: latteo
  1. PHPCod3r

    PHPCod3r

    Регистр.:
    7 июн 2010
    Сообщения:
    261
    Симпатии:
    25
    Вот встала такая проблема, очень нужно вызвать перл скрипт в пхп скрипте.
    Вообще есть очень большое желание переложить работу с файловой
    системой на плечи перла, к примеру выставить дату на каталог через перл очень просто а вот как сделать это через пхп?
    Конечно можно сделать так
    PHP:
    system('./test.pl');
    ну или как нить в этом духе, но использовать системные вызовы уж
    очень сильно не хочется..
    Вот смотрю в строну функции virtual

    http://ru2.php.net/manual/en/function.virtual.php

    Но она что то совсем не хочет работать ((
    Не знаю правильно ли я тестирую , вот к примеру сделал так
    взял такой самый простой перловый скрипт
    Код:
    #!/usr/bin/perl
    print "Content-Type: text/plain ";
    print "Hello!";
    
    В пхп скрипте в той же дире пишу
    PHP:
    <?php
    virtual
    ("./test.pl");
    но результата нуль ((
    Вообщем если кто уже имел дело с этой функцией подбросте рабочих примеров, хоть будет за что зацепиться...
     
  2. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    я точно не помню, но вроде как virtual работает только в cgi версии пхп.

    но в любом случае я бы использовал system/exec
     
  3. PHPCod3r

    PHPCod3r

    Регистр.:
    7 июн 2010
    Сообщения:
    261
    Симпатии:
    25
    virtual это так называемая Apache Functions, вот тут вот про эти функции сказано

    http://ru2.php.net/manual/en/intro.apache.php

    Я запускаю их когда
    такой вот скрипт
    PHP:
    print 'Interface Type:'.PHP_SAPI."\n"
    выдает
    Interface Type:apache2handler
    К примеру функция getallheaders замечательно работает, да и пхп скрипты можно инклюдить через виртуал, но вот насколько возможно
    заставить выполниться перл скрипт пока не ясно....

    Не ужели никто с этой функции ни разу не сталкивался?
     
  4. AleksWhite

    AleksWhite Постоялец

    Регистр.:
    5 фев 2008
    Сообщения:
    55
    Симпатии:
    10
    Надеюсь эта ссылка вам поможет.
    Using Perl Code from PHP
    Она расскажет как использовать Perl с PHP
     
  5. BACZ

    BACZ

    Регистр.:
    18 июн 2008
    Сообщения:
    610
    Симпатии:
    381
    Ну если просто дату то каталога то
    http://ru.php.net/manual/en/function.touch.php
    Вообще пхп может для файловой системы почти всё, кроме нормальной архивации гигабайтов мелких файлов (таймаут, фиговые архиваторные либы). Ну и надо учитывать что пхп тормоз - шелл на перле откроет каталог где стопицоттыщ картинок в разы быстрее чем аналогичный шелл на пхп (пхпня запросто сдохнет до кучи ещё и по памяти).

    Теперь virtual. Как это всё хозяйство работает для php SAPI и работает ли вообще - без понятия :crazy: Из нормальной папки нормального апача на среднестатистическом хостинге перловые скрипты сами собой не работают и virtual не сможет дернуть нерабочий перловый скрипт нормально. Так что до кучи в папке должно быть .htaccess с чем то вроде

    Options Indexes FollowSymLinks ExecCGI
    AddHandler cgi-script .cgi .pl

    В самом перле никаких \r а сплошные \n
    В заголовок до кучи -w и тд
    Типа этого
    Код:
    #!/usr/bin/perl -w
    print "Content-type: text/html\n\n";
    # Дальше выводим тело документа.
    print "It works!";
     
    Чмод на перловый скрипт 0755, сама папка где он валяется обычно не должна быть 0777 (ошибка 500 будет)

    Или это каталог cgi-bin, тогда наоборот пхпня часто работает оттуда достаточно загадочно, если вообще работает.

    Тогда вот эту перловку можно дёрнуть из пхп примерно так
    PHP:
    <?php
    error_reporting
    (7);
    ini_set("max_execution_time",0);
    ini_set("default_socket_timeout",5);
    $testfile="test.pl";
    virtual(dirname($_SERVER["PHP_SELF"])."/".$testfile);
     
    ?>
     
    PHPCod3r нравится это.