Via onderstaand script probeer ik een bestand op een webserver in mijn eigen netwerk te benaderen.
Aangezien ik niet wil dat de bezoeker van de website mijn ipadres te zien krijgt, doe ik dat op onderstaande manier. Echter moet ik een alternatieve poort opgeven (180), maar dat werkt niet met readfile.
Weet iemand hoe ik dat op kan lossen?
Alvast bedankt!
De code:
<?php
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=nieuwbestand.zip");
readfile("http://myip:180/bestand.zip");
?>
Ik heb het geprobeerd met file_get_contents(), maar deze geeft hetzelfde probleem.
Ik heb helaas geen toegang tot httpd.conf, aangezien de "zichtbare" website draait op gehuurde hostingruimte.
Wel kan ik daar een DNS-record toevoegen en deze laten doorverwijzen naar de webserver in mijn eigen netwerk.
Kan ik daarmee dit probleem omzeilen? Zo ja, welk DNS-type moet ik gebruiken om ook een poort op te kunnen geven?
Het feit dat je via PHP gegevens opvraagt van een andere server zorgt er al voor dat de gebruikers niet kunnen zien waar dit vandaan komt. PHP draait op de webserver en alleen de output dat het PHP script genereert wordt naar de gebruiker toe gestuurd.
bijvoorbeeld dit simpele scriptje:
<?php
// gebruik @ voor file_get_contents anders kan hij een foutmelding geven met de url er in.
$content = @file_get_contents('http://66.29.212.110/ajax/ajax_info.txt');
if($content === FALSE)
$content = 'Helaas zijn de door u opgevraagde gegevens op dit moment niet beschikbaar.';
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<?php echo $content; ?>
</body>
</html>
stuurt enkel de volgende HTML naar de gebruiker:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<p>AJAX is not a new programming language.</p>
<p>AJAX is a technique for creating fast and dynamic web pages.</p></body>
</html>
Conclusie: Het is niet nodig om dit via een alternatieve poort te doen.
> Wel kan ik daar een DNS-record toevoegen en deze laten doorverwijzen naar de
> webserver in mijn eigen netwerk.
> Kan ik daarmee dit probleem omzeilen? Zo ja, welk DNS-type moet ik gebruiken
> om ook een poort op te kunnen geven?
Kort antwoord: nee. DNS verzorgt alleen de vertaling van een naam naar een IP-adres (en andersom). Poorten zijn daar geen onderdeel van.
> Ik gebruik nu onderstaande code, maar dit levert nog steeds geen werkbaar
> resultaat op. Weet iemand wat er fout gaat?
Wat versta je precies onder "geen werkbaar resultaat"? Dat is namelijk een vage kreet, waardoor het lastig wordt om mee te denken aan een oplossing. Wordt er niets gelezen? Is de data verminkt? Wordt de data wel gelezen, maar komt die niet bij de gebruiker?
Dat laatste zou ik me voor kunnen stellen, want je leest wel de data in, maar die gooi je vervolgens meteen weg, omdat je niets met de return value van file_get_contents() doet. Snelle oplossing: zet er "print" voor. Dus: "print file_get_contents(...)"