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

-
-
- Сообщения: 141
- Зарегистрирован: 21.12.2002 (Сб) 6:48
- Откуда: Russia
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