Запуск PHP интерпретатора

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dagobert
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 141
Зарегистрирован: 21.12.2002 (Сб) 6:48
Откуда: Russia

Запуск PHP интерпретатора

Сообщение Dagobert » 07.04.2004 (Ср) 1:37

Объясните, как запустить из своей программы PHP скрипт, с передачей параметров HTTP запроса, без использования сервера. Мои эксперименты с командной строкой не принесли результата. PHP либо игнорирует параметры после имени скрипта либо вылетает без объяснений.
Кстати, может кто-нибудь подскажет как работать с Perl-интерпретатором.

Alfa
Бывалый
Бывалый
 
Сообщения: 249
Зарегистрирован: 12.01.2003 (Вс) 20:15
Откуда: Россия, Красноярск

Ответ

Сообщение Alfa » 07.04.2004 (Ср) 7:34

Вот что-то примерное:

Код: Выделить всё
    ElseIf Right(path, 4) = ".php" Then
        'PHP SUPPORT!
        'I have never programed in php in my life, and I've glimpsed php code only once
        'hence why it lacks some of the features (Like what? I just added cookies!) of perl.
       
        'be polite to other requests.
        While executingcgi
            DoEvents
        Wend
        executingcgi = True
       
        stats.List(Index) = "Exec PHP:" & cmd
       
        'go to the directory with the php script in it. (tell windows where '.' is)
        ChDir Left(path, InStrRev(path, "\"))
       
        'Dim parsed As Dictionary
        Dim parsed As Dictionary
        Set parsed = tophpvariables(CStr(data), CStr(postdata), CStr(headers("cookie")))
       
        fn = path & "temp.php" 'create temporary php script
       
        tempkill = fn
       
        tmp = "<?php" & vbNewLine & "echo ""Content-Type: text/html\n\n"";" & vbNewLine
        For q = LBound(parsed.Keys) To UBound(parsed.Keys)
            k = parsed.Keys(q)
            v = parsed(k)
            tmp = tmp & "$" & k & " = """ & v & """;" & vbNewLine
        Next q
        tmp = tmp & "include(""" & path & """);" & vbNewLine & "?>"
       
        Open fn For Output As #5
        Print #5, tmp
        Close #5
       
        On Error Resume Next
        If fso.FileExists("C:\temp.txt") Then Kill "C:\temp.txt"
        On Error GoTo 0
       
        'run the perl script (PHP MUST BE IN YOUR AUTOEXEC PATH VARIABLE)
        Shell "command.com /c php-cli.exe " & fn & " >""C:\temp.txt""", vbHide
        sendbackindex = Index
        Timer2 = True
    Else
        'Run perl CGI scripts, and pipe the result back to the server
       
        'create a temp perl script, calling the script in question, setting the
        'enviroment variables QUERRY_STRING and REMOTE_ADDR, and, anything else
        'I feel like doing. These lines are what seperates us from ALL the other
        'perl-cgi webservers out there (there are at least 4)
       
        'be polite to other requests.
        While executingcgi
            DoEvents
        Wend
        executingcgi = True
       
        stats.List(Index) = "Exec PERL:" & cmd
       
        fn = path & "temp.pl" 'create temporary perl script
        tempkill = fn
        Open fn For Output As #2
        Print #2, "" & _
        "#! /usr/bin/perl" & vbNewLine & _
        "$ENV{QUERY_STRING} = '" & data & "';" & vbNewLine & _
        "$ENV{REMOTE_ADDR} = '" & ws(Index).RemoteHostIP & "';" & vbNewLine & _
        "$ENV{SERVER_SOFTWARE} = '" & "Ashley`s Webserver/1.2 (VB/Windows)" & "';" & vbNewLine & _
        "$ENV{GATEWAY_INTERFACE} = '" & "CGI/1.1" & "';" & vbNewLine & _
        "$ENV{DOCUMENT_ROOT} = '" & Replace(docroot, "\", "\\") & "';" & vbNewLine & _
        "$ENV{SERVER_PROTOCOL} = '" & "HTTP/1.1" & "';" & vbNewLine & _
        "$ENV{REQUEST_METHOD} = '" & IIf(Len(postdata) > 0, "POST", "GET") & "';" & vbNewLine & _
        "$ENV{SERVER_ADDR} = '" & ws(0).LocalIP & "';" & vbNewLine & _
        "$ENV{SCRIPT_FILENAME} = '" & Replace(path, "\", "\\") & "';" & vbNewLine & _
        "$ENV{SCRIPT_NAME} = '" & Replace(cmd, "\", "\\") & "';" & vbNewLine & _
        "$ENV{SERVER_NAME} = '" & ws(0).LocalHostName & "';" & vbNewLine & _
        "$ENV{SERVER_PORT} = '" & ws(0).LocalPort & "';" & vbNewLine & _
        "$ENV{HTTP_USER_AGENT} = '" & headers("user-agent") & "';" & vbNewLine & _
        "$ENV{HTTP_REFERER} = '" & headers("referer") & "';" & vbNewLine & _
        "$ENV{HTTP_ACCEPT_LANGUAGE} = '" & headers("accept-language") & "';" & vbNewLine & _
        "$ENV{HTTP_ACCEPT} = '" & headers("accept") & "';" & vbNewLine & _
        "$ENV{HTTP_COOKIE} = '" & headers("cookie") & "';" & vbNewLine & _
        "$ENV{CONTENT_TYPE} = '" & headers("content-type") & "';" & vbNewLine & _
        "$ENV{CONTENT_LENGTH} = '" & headers("content-length") & "';" & vbNewLine & _
        "$ENV{PATH_INFO} = '" & pathinfo & "';" & vbNewLine & _
        "open STDIN,""C:\\postdata.txt"";" & vbNewLine & _
        "do '" & path & "';" & vbNewLine & _
        "close STDIN;"
        Close #2
        'I don't know how the 3rd to last line of that script worked. it seems like it
        'should crash perl. but, good old opensource comunity pulled through, and we have post support!
        '(I'm using activeperl 5.6.1)
       
        Open "C:\postdata.txt" For Output As #3
        Print #3, postdata
        Close #3
       
        'go to the directory with the cgi script in it. (To avoid a bug in either vb or perl)
        ChDir Left(fn, InStrRev(fn, "\"))
       
        On Error Resume Next
        If fso.FileExists("C:\temp.txt") Then Kill "C:\temp.txt"
        On Error GoTo 0
       
        'run the perl script (PERL MUST BE IN YOUR AUTOEXEC PATH VARIABLE)
        Shell "command.com /c perl " & fso.GetFileName(fn) & " >""C:\temp.txt""", vbHide
        'Debug.Print "perl " & fso.GetFileName(fn) & " >""C:\temp.txt"""
        sendbackindex = Index
        Timer2 = True
        '(now the script runs, and we wont hear from it again until timer2 is called in 5 seconds)
    End If
Изображение

Dagobert
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 141
Зарегистрирован: 21.12.2002 (Сб) 6:48
Откуда: Russia

Сообщение Dagobert » 09.04.2004 (Пт) 1:56

Да, всё гениальное - просто. Смешно. Сам так же делал интерпретацию для ASP, и не подумал, о PHP. Хотя может есть другой вариант.
Всё равно спасибо.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15

    TopList