include-blackout

Tråden skapades och har fått 10 svar. Det senaste inlägget skrevs .
1

Sitter och får inte ordning på en include...

PHP är förstås språket.

Vad jag vill göra är att hämta en exekverad php-fil från en annan (eller samma server) vars resultat är en xml-fil.

Men det spelar ingen roll vad jag gör - filen verkar dels köras på servern och dels lokalt...

lokal fil:

<?php
include ("http://tosti.dk/postgresql/echo.php?foo=test");
?>

eremote fil:

<?php
echo '<xmltestt />
?>

Förväntat resultat:

[inget alls]

Verkligt resultat:

Citat:

<xmltest />

Jag förväntar mig alltså att scriptet körs på den remota servern och sen inkluderas. Det verkar den dock inte göra.

Det som gör det riktigt konstigt är att den inte heller verkar köras lokalt, för sätter jag i remote-filen en variabel t ex $test så kan jag inte komma åt denna efter att jag har include:at filen lokalt. Det borde jag kunnat om filen hade includats normalt och körts lokalt.

Jag är medveten om att det är måndag morgon och att det står ganska still i huvudet, och att jag borde fatta själv vad som är fel. Men eftersom inte så är fallet är jag i behov av lite hjälp...

Kan tillägga att jag även testat att göra en readfile på samma url, med samma resultat: utskrift av filen fast jag inte har någon echo någonstans...

För att ytterligare konkretisera vad jag vill uppnå: jag vill i princip få resultatet från en php-fil som returnerar xml-formaterad data till en annan fil genom include, readfile eller fopen. Den här datan vill jag spara undan i en variabel.

tjenare, jag är inte helt säker på jag har fattat rätt med vad du vill upppnå, men i filen på totsi servern har printar du ju ut en sträng som heter <xmltest /> vilket är precis det du får ut.

men nu till ditt verkliga problem, jag har aldrig haft behov att göra det du vill så jag har ingen erfarenhet utav det, men hur funkar php när man skall kunna hantera variabler osv över olika domän/zoner?

kan du includa en fil som sätter $foo och sen använda den lokalt eller?

Citat:

lokal fil:

code:
<?php
include ("http://tosti.dk/postgresql/echo.php?foo=test");
?>

eremote fil:

code:
<?php
echo '<xmltestt />
?>

Förväntat resultat:

[inget alls]

Verkligt resultat:

quote:
<xmltest />

tosti-serverfilen skriver ut ett eller annat. Om man inkluderar med full url kan man inkludera med querystringvariabler, men det har inget med mitt problem att göra.

Vad jag vill är att inkludera den exekverade filen. Jag vill alltså att den skall köras på den externa servern och resultatet (det vill säga vad som skrivs ut) bör ju vara en textfil. Precis som det browsern får sänt till sig om man skulle skrivit in urlen för hand. Men include beter sig konstigt.

Det enda echo.php innehåller just nu är

<?php
return $_GET[foo];
?>

I samma folder på servern finns en fil med namnet return.php.

Den innehåller koden

return $_GET[foo];

URL:erna är:echo.php
return.php

ok, omedelbart skulle jag säga att att en fopen borde funka, alternativt wget/curl, problemet är ju då att då får parsa ut ditt stuff själv vilket ju kan tyckas lite onödigt kanske.

Jag tror att include/require är helt fel väg i detta fallet, eftersom du inte bryr dig så mycket om vad sidan gör, samt inte har nån nytta av eventuella variabler den använder sig av. Du vill bara ha slutresultatet, alltså tror jag att du skall behandla "remote scriptet" som en vanlig fil och då öppna den med fopen() eller dylikt.

Jo, fast det är ju omständigt att loopa, speciellt som det _skall_ gå (fast det inte gör det)...

Följande fungerar:

<?php
$stream=fopen("http://tosti.dk/postgresql/echo.php?foo=vad_d...","rb");
if($stream)
{
	do
	{
		$packet=fread($stream,4096);
		if(strlen($packet)==0)
		{
			break;
		}
		$data.=$packet;
	}
	while(true);
}
fclose($stream);
echo $data;
?>
  • Medlem
  • Stockholm
  • 2003-12-01 13:58

Ett bra tips om du använder dig av include är att köra det som en if-sats så du vet om inkluderingen lyckades eller inte.

if(!include($fil)) {
   echo "Filen hittades inte... avbryter laddning av sidan..."; 
   exit;
}

Alternativt använder du require (som inte är någon mening att köra som if-sats då den kör fatal-error om filen inte lyckas inkluderas.

Jag har ingen bra idé om hur ditt problem löses men jag skulle kolla upp om det inte kan lösas med något av det som står här

Hmmm... Nu ballar det ur igen - kan inte göra str_replace på $data som är av typen "String"...

Citat:

Skrevs ursprungligen av scooterbabe
Vad jag vill är att inkludera den exekverade filen. Jag vill alltså att den skall köras på den externa servern och resultatet (det vill säga vad som skrivs ut) bör ju vara en textfil. Precis som det browsern får sänt till sig om man skulle skrivit in urlen för hand. Men include beter sig konstigt.

Hmm, om du vill läsa in output:en från en request kan du ju alltid använda file() och köra impload() för att lägga ihop alla rader till en sträng, något i stil med följande:

<?php
$xml = implode('', file('http://tosti.dk/postgresql/echo.php?foo=vad_d...'));
print $xml;
?>

$xml kommer då att innehålla det som scriptet skickar som utdata, färdigt att parsa eller vad du nu vill göra med det.

Eller missuppfattar jag något?

Citat:

Skrevs ursprungligen av gnurbmaster
Hmm, om du vill läsa in output:en från en request kan du ju alltid använda file() och köra impload() för att lägga ihop alla rader till en sträng, något i stil med följande:

---

Eller missuppfattar jag något?

Jo, funderade på det men det kändes som att gå över ån efter vatten...

Sen upptäckte jag den underbara funktionen get_file_contents(string url) som i princip är samma som file() men som hämtar till en variabel istället för en vektor, så nu funkar allt precis som jag vill !

1
Bevaka tråden