Bekijk Volledige Versie : Kan iemand mij helpen ? PHP / Javascipt / cgi-bin / Linux
Joachim Smit
22/04/04, 12:15
Ik heb op het internet een aantal tools gevonden geschreven in PHP om via
een website bestanden te kunnen uploaden en downloaden. Omdat geen van alle
mij helemaal naar de zin waren heb ik zelf iets geschreven. Met PHP
Toen het af was beviel het mij helemaal niet dat ik tijdens het uploaden
geen progress-bar zag. De gebruiker zit maar te wachten zonder te weten wat
er gebeurt. Omdat er binnen PHP er geen mogelijkheid bestaat om dat voor
elkaar te kunnen krijgen ben ik gaan zoeken, en heb wat software gevonden
waarmee dat wel mogelijk is. Een combinatie van PHP, Javascript en
cgi-scripts in de cgi-bin directory.
Op mijn Redhat 9 servertje kreeg ik het keurig voor elkaar. Het werkt
uitstekend !
Vervolges heb ik het geinstalleerd op een Trustix-server (waar het allemaal
uiteindelijk op moet draaien) en het werkt niet meer. Trustis is een op
Redhat gebaseerde distributie. De plaats van de bestanden verschilt hier en
daar.
Op het moment dat de progress-bar in een pop-up zou moeten verschijnen staat
er alleen maar 'Page not found'
Al dagen heb ik geprobeerd het probleem op te lossen, ik kan echt niet
vinden waar het aan zou kunnen liggen.
Is er iemand die zowel van PHP, Javascript en cgi-scripts verstand heeft en
mij iets verder kan helpen?
Welke code wil je dat ik in de nieuwsgroep post?
Bij voorbaat enorm bedankt.
Groet,
Joachim
Daniel Tryba
22/04/04, 17:05
Joachim Smit <joachim@onzin.abc> wrote:
[knip]
> Welke code wil je dat ik in de nieuwsgroep post?
Alle relevante informatie, dus:
-software
-configuratie
-paden/urls
--
Daniel Tryba
Joachim Smit
22/04/04, 20:35
Dat is zo veel, dan kan ik je nog beter het IP-nummer en het root-password
geven.
Dit is de foutmelding in /var/log/httpd/error_log: (Het IP-nummer heb ik
veranderd)
[Thu Apr 22 20:12:25 2004] [error] [client 217.136.58.129] File does not
exist: /home/httpd/html/klanten/<, referer:
http://123.456.789.12/klanten/pgbar.php?iTotal=-1&iRead=0&iStatus=1&sessioni
d=0e1f31b377f57f8434880f827ff6b781
pgbar.php (die dit aanroept) ziet er zo uit:
======== BEGIN ===========
<html>
<head>
<title>Verzenden bestanden</title>
</head>
<?php
// --------------------------------
// Set upload start time
// This is set once as the point in time at which the upload was started
// Elapsed time, est remaining time, and upload speed need this
$dtstart = time();
// --------------------------------
$iTotal = urlencode($_REQUEST['iTotal']);
$iRead = urlencode($_REQUEST['iRead']);
$iStatus = urlencode($_REQUEST['iStatus']);
$sessionId = urlencode($_REQUEST['sessionid']);
// --------------------------------
// Set current time
// This is set on each refresh to measure elapsed time
// Elapsed time, est remaining time, and upload speed need this
//$dtnow = urlencode($_REQUEST['dtnow']);
$dtnow = $dtstart;
// --------------------------------
// --------------------------------
// This is modified to include the new vars ($dtstart, $dtnow) introduced in
this file
$link =
("/cgi-bin/progress.cgi?iTotal=".$iTotal."&iRead=".$iRead."&iStatus=".$iStat
us."&sessionid=".$sessionId."&dtnow=".$dtnow."&dtstart=".$dtstart);
// --------------------------------
?>
<frame src="/klanten/sponser.php">
<frameset rows="*,2" scroll="none">
<frame src="<? echo $link; ?>">
</frameset>
<noframes>
This is the progress bar window for the PHP mega upload. <a
href="progress.php">Follow this
link</a> for the main page.
</noframes>
</html>
======== EIND ===========
Jan Ehrhardt
22/04/04, 20:35
Joachim Smit in nl.internet.www.server-side (Thu, 22 Apr 2004 20:25:49
+0200):
> $link =
>("/cgi-bin/progress.cgi?iTotal=".$iTotal."&iRead=".$iRead."&iStatus=".$iStat
>us."&sessionid=".$sessionId."&dtnow=".$dtnow."&dtstart=".$dtstart);
Wat doen die haakjes daar?
Jan
--
Look, Ma. No tables - http://enbio.steenbergen-stichting.nl/
Joachim Smit
22/04/04, 20:55
> Wat doen die haakjes daar?
De haakjes zijn weg maar dat maakt geen verschil.
Groet,
Joachim
Daniel Tryba
22/04/04, 21:15
Joachim Smit <joachim@onzin.abc> wrote:
> File does not exist: /home/httpd/html/klanten/<
Veel duidelijker kan het niet, die file bestaat niet (wat doet die <
daar?).
--
Daniel Tryba
Joachim Smit
22/04/04, 21:25
> Veel duidelijker kan het niet, die file bestaat niet (wat doet die <
> daar?).
Ik heb geen idee.
Dit zijn de regels die het probleem veroorzaken:
<frame src="/klanten/sponser.php">
<frameset rows="*,2" scroll="none">
<frame src="<? echo $link; ?>">
</frameset>
Als ik opvraag wat de waarde van $link is krijg ik het volgende:
/cgi-bin/progress.cgi?iTotal=-1&iRead=0&iStatus=1&sessionid=8b213ce807c92665
ee713a876dc41a4b&dtnow=1082660988&dtstart=1082660988
De variabele $link bestaat dus en heeft een geldige waarde. Het enige dat ik
me kan voorstellen is dat de cgi-bin scripts niet werken.
Maar als ik een script aanmaak met de volgende regels dan werkt dat
uitstekend. Bovendien hebben de scripts daar allemaal dezelfde eigenaar. Ik
snap er echt helemaal niets van.
Groet,
Joachim
==BEGIN
#!/usr/bin/perl5
print "Content-Type: text/plain\n\n";
print "Hello world!\n";
==EIND
Daniel Tryba
22/04/04, 21:35
Joachim Smit <joachim@onzin.abc> wrote:
>> Veel duidelijker kan het niet, die file bestaat niet (wat doet die <
>> daar?).
>
> Ik heb geen idee.
>
> Dit zijn de regels die het probleem veroorzaken:
>
> <frame src="/klanten/sponser.php">
> <frameset rows="*,2" scroll="none">
> <frame src="<? echo $link; ?>">
> </frameset>
>
> Als ik opvraag wat de waarde van $link is krijg ik het volgende:
Wat je niet gedaan hebt:
-je hebt niet naar de output gekeken
-je hebt niet de verschillenen in de configuratie bekeken
Bekijk http://www.php.net/manual/en/language.basic-syntax.php 2de
paragraaf. Dat verklaart vast waar die < vandaan komt.
--
Daniel Tryba
Joachim Smit
22/04/04, 21:55
> Bekijk http://www.php.net/manual/en/language.basic-syntax.php 2de
> paragraaf. Dat verklaart vast waar die < vandaan komt.
Ik heb de originele HTML-code vervangen door PHP-code:
(En dus het "?>" teken naar onderen verplaatst:
==BEGIN
print ( ' <frame src="/klanten/sponser.php"> ' ) ;
print ( ' <frameset rows="*,2" scroll="none"> ' ) ;
print ( ' <frame src=" ' . $link . ' "> ' ) ;
print ( ' </frameset> ' ) ;
?>
==EIND
Nu krijg ik niet meer de oude error, maar een nieuwe: Internal Server Error
In het log staat het volgende:
[Thu Apr 22 21:31:55 2004] [error] [client 217.136.58.129] Can't locate
FCGI.pm in @INC (@INC contains: /usr/lib/perl5/5.8.3/i586-linux-thread-multi
/usr/lib/perl5/5.8.3 /usr/lib/perl5/site_perl/5.8.3/i586-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.3/i586-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl .) at
/home/httpd/cgi-bin/progress.cgi line 35., referer:
Als ik kijk waar FCGI.pm staat vind ik hem wel: (6e regel)
Hoe krijg ik hem nu in @INC ?
Groet,
Joachim
root@pdflinux /# locate FCGI | more
/usr/share/man/man3/FCGI.3
/usr/lib/perl5/site_perl/5.8.0/i586-linux/auto/FCGI
/usr/lib/perl5/site_perl/5.8.0/i586-linux/auto/FCGI/FCGI.so
/usr/lib/perl5/site_perl/5.8.0/i586-linux/auto/FCGI/FCGI.bs
/usr/lib/perl5/site_perl/5.8.0/i586-linux/auto/FCGI/.packlist
/usr/lib/perl5/site_perl/5.8.0/i586-linux/FCGI.pm
/root/.cpan/sources/authors/id/S/SK/SKIMO/FCGI-0.67.tar.gz
/root/.cpan/build/FCGI-0.67
/root/.cpan/build/FCGI-0.67/configure.in
Daniel Tryba
22/04/04, 22:05
Joachim Smit <joachim@onzin.abc> wrote:
>> Bekijk http://www.php.net/manual/en/language.basic-syntax.php 2de
>> paragraaf. Dat verklaart vast waar die < vandaan komt.
>
> Ik heb de originele HTML-code vervangen door PHP-code:
>
> (En dus het "?>" teken naar onderen verplaatst:
[knip]
Je hebt schijnbaar helaas niet begrepen waarop ik doelde.
<? werkt niet altijd en moet daarom vermeden worden.... <?php
daarintegen wel.
> Nu krijg ik niet meer de oude error, maar een nieuwe: Internal Server Error
>
> In het log staat het volgende:
>
> [Thu Apr 22 21:31:55 2004] [error] [client 217.136.58.129] Can't locate
> FCGI.pm in @INC (@INC contains: /usr/lib/perl5/5.8.3/i586-linux-thread-multi
> /usr/lib/perl5/5.8.3 /usr/lib/perl5/site_perl/5.8.3/i586-linux-thread-multi
> /usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl
> /usr/lib/perl5/vendor_perl/5.8.3/i586-linux-thread-multi
> /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl .) at
> /home/httpd/cgi-bin/progress.cgi line 35., referer:
Dat is een perl foutmelding...
> Als ik kijk waar FCGI.pm staat vind ik hem wel: (6e regel)
>
> Hoe krijg ik hem nu in @INC ?
cp dat ding naar een van bovenstaande directories, maar dat is vast niet
de nette oplossing.
--
Daniel Tryba
Joachim Smit
22/04/04, 22:45
> Je hebt schijnbaar helaas niet begrepen waarop ik doelde.
> <? werkt niet altijd en moet daarom vermeden worden.... <?php
> daarintegen wel.
>
Ik had het script al aangepast nog voordat ik jouw posting zag. In ieder
geval, dat probleem is opgelost.
>
> cp dat ding naar een van bovenstaande directories, maar dat is vast niet
> de nette oplossing.
Ik blijf die melding houden. Ik heb steeds de volgende meldingen in het log.
Als ik google op "Premature end of script headers" lees ik overal dat de
eerste regel juist moet zijn en dat perl moet bestaan als /usr/bin/perl.
Beiden is het geval.
Bovendien heb ik FCGI.pm gekopieerd naar de directory /usr/lib/perl/5.8.3
dus zou hij hem moeten vinden. Voor de zekerheid ook nog gereboot.
Wat nu ?
Groet,
Joachim
===BEGIN
[Thu Apr 22 22:28:07 2004] [error] [client 217.136.58.129] Premature end of
script headers: progress.cgi, referer:
[Thu Apr 22 22:28:07 2004] [error] [client 217.136.58.129] Can't locate
loadable object for module FCGI in @INC (@INC contains:
/usr/lib/perl5/5.8.3/i586-linux-thread-multi
/usr/lib/perl5/5.8.3
/usr/lib/perl5/site_perl/5.8.3/i586-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.3
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.3/i586-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.3
/usr/lib/perl5/vendor_perl .) at /home/httpd/cgi-bin/progress.cgi line 35,
referer:
===EIND