[PHP] exec() system() >>> CGI-Error

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hi

Na veel gezocht en geprobeert te hebben kom ik er nog steeds niet uit, daarom een postje.

Ik moet in een website een mp3 bestand inkorten tot 30 seconden. Dit kan d.m.v het programma mp3splt. Uitgevoerd en getest op de server werkt het programma zoals het moet.

Alleen als ik het nu in een php scipt verwerk, dan krijg ik CGI-Errors:
CGI-fout
De opgegeven CGI-toepassing heeft foutief gereageerd door geen volledige set HTTP-headers te retourneren.

geprobeerde scipts:
PHP:
1
2
system("mp3splt naam.mp3 0.00 0.30 nieuwenaam.mp3");
exec("mp3splt naam.mp3 0.00 0.30 nieuwenaam.mp3");


Het vreemde is dat ik wel het nieuwe mp3tje krijg maar op het scherm komt die CGI-Error...

Als ik op de server in de cmd (command) het volgende tik, dan werkt het weer wel.
code:
1
mp3splt naam.map 0.00 0.30 nieuwenaam.mp3


Uit me logfiles kan ik ook niks halen:
code:
1
2
3
4
5
#Software: Microsoft Internet Information Services 6.0
#Version: 1.0
#Date: 2003-11-30 12:37:56
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status 
2003-11-30 12:37:56 192.168.0.1 GET /test.php - 80 - 192.168.0.36 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+.NET+CLR+1.1.4322) 502 2 2147500037


Systeem info:
Windows Server 2003 (Windows NT SERVER 5.2 build 3790 )
PHP Version 4.3.4

Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 16-09 20:14
Je start een PHP script via HTTP en volgens de HTTP specs moet je altijd een HTTP response teruggeven. Aangezien je nergens een header of echo statement gebruikt wordt er ook geen response teruggegeven.

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

JonkieXL schreef op 30 november 2003 @ 14:09:
Je start een PHP script via HTTP en volgens de HTTP specs moet je altijd een HTTP response teruggeven. Aangezien je nergens een header of echo statement gebruikt wordt er ook geen response teruggegeven.
Dus.... TS moet even een echo 'Gelukt!' uitspugen na de code en dan zou het moeten werken :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
JonkieXL schreef op 30 november 2003 @ 14:09:
Je start een PHP script via HTTP en volgens de HTTP specs moet je altijd een HTTP response teruggeven. Aangezien je nergens een header of echo statement gebruikt wordt er ook geen response teruggegeven.
Met dit commando: (en ook niets meer)
PHP:
1
2
3
<?
exec("mp3splt naam.mp3 0.00 0.30 nieuwenaam.mp3");
?> 


hij echo't niks....
je kan 2 variabele erbij zetten waar de output en de return waarde in komen:
PHP:
1
2
3
<?
exec("mp3splt naam.mp3 0.00 0.30 nieuwenaam.mp3", $output, $return);
?> 


maar blijft hetzelfde

Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 16-09 20:14
Hoe duurt het uitvoeren van die executable? Wellicht krijg je een timeout.

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
JonkieXL schreef op 30 november 2003 @ 14:09:
Je start een PHP script via HTTP en volgens de HTTP specs moet je altijd een HTTP response teruggeven. Aangezien je nergens een header of echo statement gebruikt wordt er ook geen response teruggegeven.
PHP:
1
2
3
4
5
6
<?php
error_reporting (E_ALL);
function Foo()
{
}
?>

Output ook geen tekst, en ik krijg ook geen error?

Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 16-09 20:14
PrisonerOfPain schreef op 30 november 2003 @ 14:23:
[...]


PHP:
1
2
3
4
5
6
<?php
error_reporting (E_ALL);
function Foo()
{
}
?>

Output ook geen tekst, en ik krijg ook geen error?
PHP zal wellicht altijd een HTTP 200 OK response teruggeven, maar dan zonder content. Dus dit zal idd het probleem niet zijn. Denk dus toch meer aan een timeout. Je zou de script execution timeout ook wellicht hoger kunnen zetten via www.php.net/set_time_limit

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
JonkieXL schreef op 30 november 2003 @ 14:22:
Hoe duurt het uitvoeren van die executable? Wellicht krijg je een timeout.
PHP:
1
2
3
<? 
exec("mp3splt naam.mp3 0.00 0.30 nieuwenaam.mp3", $output, $return); 
?> 


Script is binnen 1 seconden uitgevoert.

Acties:
  • 0 Henk 'm!

  • me1299
  • Registratie: Maart 2000
  • Laatst online: 00:01

me1299

$ondertitel

Verwijderd schreef op 30 november 2003 @ 14:35:
[...]


PHP:
1
2
3
<? 
exec("mp3splt naam.mp3 0.00 0.30 nieuwenaam.mp3", $output, $return); 
?> 


Script is binnen 1 seconden uitgevoert.
wat gebeurt er nu als je daarna iets print?

Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Bij een foutief geconfigureerde IIS server krijg je als je een verkeerde naam voor een phpscript intypt (bv: http://iisserver/idnex.php) toch ook zo'n CGI-error? Check ff de filename.

Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 16-09 20:14
Misschien is het handig om even de HTTP response op te vangen via een PHP script.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$fp = fsockopen ("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
   echo "$errstr ($errno)<br>\n";
} else {
   fputs ($fp, "GET /script.php HTTP/1.0\r\nHost: www.example.com\r\n\r\n");
   while (!feof($fp)) {
       echo fgets ($fp,128);
   }
   fclose ($fp);
}
?>


Verander www.example.com in de www of ip adres van je site en /script.php naar de URL van je script.

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Skaah schreef op 30 november 2003 @ 14:40:
Bij een foutief geconfigureerde IIS server krijg je als je een verkeerde naam voor een phpscript intypt (bv: http://iisserver/idnex.php) toch ook zo'n CGI-error? Check ff de filename.
Krijg dan een andere error:
code:
1
2
De pagina kan niet worden weergegeven
U hebt geprobeerd een CGI-, ISAPI- of een ander uitvoerbaar programma uit te voeren vanuit een map waarin geen programma&#8217;s kunnen worden uitgevoerd.

Acties:
  • 0 Henk 'm!

  • MMUilwijk
  • Registratie: Oktober 2001
  • Laatst online: 09:59
Verwijderd schreef op 30 november 2003 @ 14:46:
[...]


Krijg dan een andere error:
code:
1
2
De pagina kan niet worden weergegeven
U hebt geprobeerd een CGI-, ISAPI- of een ander uitvoerbaar programma uit te voeren vanuit een map waarin geen programma&#8217;s kunnen worden uitgevoerd.
En dat is dan weer een error m.b.t tot de machtingen per map binnen IIS...
Controleer even of de map de juiste machtingen (script-uitvoer heeft) !

Everytime I suffer I become a better man because of it


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
MMUilwijk schreef op 30 november 2003 @ 14:50:
[...]


En dat is dan weer een error m.b.t tot de machtingen per map binnen IIS...
Controleer even of de map de juiste machtingen (script-uitvoer heeft) !
Al geprobeert
Als ik "iedereen" toevoeg aan alle bronnen,
en in IIS alle CGI-extenties toegestaan,

en nee, dan werkt het ook niet

Acties:
  • 0 Henk 'm!

  • DR
  • Registratie: December 2000
  • Niet online

DR

en zoiets

PHP:
1
2
3
4
header("Content-type: text/plain");

exec("mp3splt naam.mp3 0.00 0.30 nieuwenaam.mp3");
echo "Gelukt!\n\n";


heeft te maken met die 2 newlines achteraan afaik

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
DR schreef op 30 november 2003 @ 15:14:
en zoiets

PHP:
1
2
3
4
header("Content-type: text/plain");

exec("mp3splt naam.mp3 0.00 0.30 nieuwenaam.mp3");
echo "Gelukt!\n\n";


heeft te maken met die 2 newlines achteraan afaik
Nope, blijf de CGI-fout krijgen

Acties:
  • 0 Henk 'm!

  • DR
  • Registratie: December 2000
  • Niet online

DR

en als je ipv die header gewoon "print Content-type: text/plain"; gebruikt :?

code:
1
2
3
4
5
6
#!/usr/local/php/bin/php
<?
print "Content-type: text/plain\n\n";
exec('prog');
echo "Gelukt!\n\n";
?>

[ Voor 50% gewijzigd door DR op 30-11-2003 16:01 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
DR schreef op 30 november 2003 @ 16:00:
en als je ipv die header gewoon "print Content-type: text/plain"; gebruikt :?

code:
1
2
3
4
5
6
#!/usr/local/php/bin/php
<?
print "Content-type: text/plain\n\n";
exec('prog');
echo "Gelukt!\n\n";
?>
Nope,
Still the same error

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het stomste is nog.....
Hij doet het wel, ik krijg WEL een nieuw mp3tje met de goede grote e.d.

Kan ik soms oom via een omweg of iets het script uitvoeren, en dan naar een nieuwe pagina gaan?

Acties:
  • 0 Henk 'm!

  • me1299
  • Registratie: Maart 2000
  • Laatst online: 00:01

me1299

$ondertitel

Verwijderd schreef op 30 november 2003 @ 16:17:
Het stomste is nog.....
Hij doet het wel, ik krijg WEL een nieuw mp3tje met de goede grote e.d.

Kan ik soms oom via een omweg of iets het script uitvoeren, en dan naar een nieuwe pagina gaan?
Ja dat zou je kunnen doen. Maar als laatste redmiddel. Het is natuurlijk nogal symptoom bestreiding.

Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Als laatste redmiddel kun je een @ voor exec neerzetten. Dan negeert ie die foutmelding, lijkt me.

Gooi je gewoon een redirect header ertegenaan, en je bent klaar.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Grijze Vos schreef op 30 november 2003 @ 17:18:
Als laatste redmiddel kun je een @ voor exec neerzetten. Dan negeert ie die foutmelding, lijkt me.

Gooi je gewoon een redirect header ertegenaan, en je bent klaar.
Sorry, ook niets.... Met "@" en/of met:
header("Location: http://server/");

Werken niet...

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Hmz. Kun je je php niet als module draaien ipv CGI app? Misschien dat dat het verhelpt. Alhoewel ik de connectie tussen als cgi draaien en system calls uitvoeren niet echt zie..

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Grijze Vos schreef op 30 november 2003 @ 17:41:
Hmz. Kun je je php niet als module draaien ipv CGI app? Misschien dat dat het verhelpt. Alhoewel ik de connectie tussen als cgi draaien en system calls uitvoeren niet echt zie..
En hoe doe ik dat????? ???? O-)

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Je draait IIS zie ik. Ik geloof dat het me daar nog nooit gelukt is om het als module te draaien. Kheb zelf mer ervaring met Apache. Het staat gewoon in de manual beschreven hoor.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • DR
  • Registratie: December 2000
  • Niet online

DR

Verwijderd schreef op 30 november 2003 @ 17:53:
[...]


En hoe doe ik dat????? ???? O-)
To use the ISAPI module, do the following:

*

If you don't want to perform HTTP Authentication using PHP, you can (and should) skip this step. Under ISAPI Filters, add a new ISAPI filter. Use PHP as the filter name, and supply a path to the php4isapi.dll.
*

Under 'Home Directory', click on the 'Configuration' button. Add a new entry to the Application Mappings. Use the path to the php4isapi.dll as the Executable, supply .php as the extension, leave Method exclusions blank, and check the Script engine checkbox.
*

Stop IIS completely (NET STOP iisadmin)
*

Start IIS again (NET START w3svc)
http://www.php.net/manual/en/install.iis.php
Pagina: 1