[PHP] Externe informatie txt met PHP zonder file_get_content

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste Tweakers,

Ik ben bezig met een versie checker voor een CMS.
Nu weet ik dat de PHP functie file_get_content op niet zo heel veel servers werkt zonder dat zelf aan te zetten.

Natuurlijk is dat niet helemaal handig dus zoek ik naar een ander alternatief.

Het doel is als het volgende:
Ik heb bijvoorbeeld 10 klanten met mijn CMS. Ik installeer binnen dat CMS de versie checker.
Nu staat op mijn server (compleet ander domein) een txt bestand met de laatste versie erin (bijvoorbeeld 0.9.6).

Nu wil ik dat de servers van mijn klanten verbinding maken met mijn server (heel ander domein als dat van de klant dus) en dat versienummer ophalen en in een PHP variabele zetten.
En dat moet gebeuren zonder file_get_content.

Hebben jullie hiervoor een oplossing?
Ik heb het al geprobeerd met PHP.JS (JavaScript die functies client-side maakt) maar helaas ondersteund dat script de mogelijkheid om het bestand wat je nodig hebt op een andere server te zetten niet.. (zie note 1).

Het is dus de bedoeling dat bijvoorbeeld
Klant 1 (domein http://www.klant1.nl waar het CMS opstaat) en
Klant 2 (domein http://www.klant2.nl waar het CMS opstaat)

verbinding maken met een .txt bestand op mijn server (bijvoorbeeld http://www.mijnbedrijf.nl) en dat dit ingeladen wordt zonder dat file_get_content in PHP.INI aan moet staan.

Het is trouwens geen probleem als ik het in een ander bestand moet zetten (dus niet in .txt).

Ik hoop dat jullie mij kunnen helpen,

Bedankt! :)

Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

Lever dan bij je CMS gewoon een .htaccess mee die die flag aanzet, en je probleem is opgelost (zover ik weet)

Ey!! Macarena \o/


Acties:
  • 0 Henk 'm!

Verwijderd

Het kan met fopen, file_get_contents, socket_*, curl, diverse exec functies (command line wget, curl) etcetera. Er is echt wel zat mogelijk.

Acties:
  • 0 Henk 'm!

Verwijderd

Als je een oplossing zoekt in javascript, moet je toch even achter je oor gaan krabben of je wel een CMS moet gaan hosten/leveren.

Maar goed, met rsync kan je heel makkelijk en veilig je cms over al je servers verspreiden. Als je geen eigen servers hebt of rsync niet kan gebruiken, kan je kijken naar een php oplossing: http://nl.php.net/fsockopen of http://nl.php.net/curl

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het gaat mij erom dat het Open Source en laagdrempelig wordt (wil het ook voor anderen vrijgeven), het is niet mijn CMS inderdaad.

Dus ik wil dat iedereen geen functies moet opengooien..
Maar ik begrijp de oplossingen nog niet helemaal, ben niet zo heel super goed in PHP.
Verwijderd schreef op zondag 30 augustus 2009 @ 16:39:
Het kan met fopen, file_get_contents, socket_*, curl, diverse exec functies (command line wget, curl) etcetera. Er is echt wel zat mogelijk.
Het moet dus niet met file_get_contents, maar zou je wat meer informatie kunnen geven:
Dit is de code nu:
PHP:
1
2
$sVersionFile = "http://www.mijnwebsite.nl/version.txt";
$newversion = file_get_contents ( $sVersionFile );

Het moet dus iets soorgelijks worden zonder file_get_contents als functie.

Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

Ey!! Macarena \o/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben al wat verder..

Deze code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
$ch = curl_init("http://www.mijndomein.nl");
$fp = fopen("versie.txt", "r");

curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);
curl_close($ch);
fclose($fp);

echo $fp


geeft nu alleen de uitkomst: Resource id #2

Wat is het probleem, heb ik iets niet goed gedaan?

Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

Je bent je er van bewust dat als curl uit staat, je exact het zelfde probleem krijgt als met file_get_contents.

Daarnaast kan je het dus gewoon aanzetten met .htaccess

Ik snap je logica dus niet zo. Hele workaround voor iets wat met 1 regel aan te zetten is.

Ey!! Macarena \o/


Acties:
  • 0 Henk 'm!

Verwijderd

Ik snap ook het probleem niet zo. Als het écht heel belangrijk is kun je gewoon voor elke mogelijkheid om een verbinding te maken 1 voor 1 proberen. Overigens is niet alles aan/uit te zetten in een .htaccess bestand.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik zou persoonlijk ook niet veel waarde hechten aan het updaten van sites die af zijn en naar behoren werken. Waarom zou je een risico in het verhaal brengen als dat niet nodig is :? Of hebben je klanten daarvoor een contract afgesloten?

Acties:
  • 0 Henk 'm!

  • Tjolk
  • Registratie: Juni 2007
  • Laatst online: 19:31
PHP:
1
implode("", file('http://www.example.com/bestand.php'));

Als je zorgt dat je eigen bestand de informatie uitspuugt bij het opvragen ervan, moet dat gewoon werken. Kun je er eventueel nog voor zorgen dat je meerdere dingen in je versiebestand hebt staan, bijvoorbeeld een linkje om te updaten naar de nieuwste versie oid.

[ Voor 0% gewijzigd door Tjolk op 31-08-2009 10:00 . Reden: haakje vergeten ]

Tjolk is lekker. overal en altijd.


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Waarom niet een versie.php?v=eigen.versie om te controleren of er een update is?

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Je zou anders omgekeerd kunnen werken. Vanaf jouw server een script aanroepen op de servers van de klant.

Acties:
  • 0 Henk 'm!

  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 22-08 11:59

Mike2k

Zone grote vuurbal jonge! BAM!

Met guillome...

waarom laat je niet gewoon je cms een url opvragen en zijn eigen versie meesturen. Als hij een true terug krijgt is er een update en downloaden maar. False en er is geen update...all is well...

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 21:46

Matis

Rubber Rocket

Fastex schreef op maandag 31 augustus 2009 @ 10:18:
Met guillome...

waarom laat je niet gewoon je cms een url opvragen en zijn eigen versie meesturen. Als hij een true terug krijgt is er een update en downloaden maar. False en er is geen update...all is well...
Helemaal mee eens. *Alle* CMS componenten in Joomla doen het op exact dezelfde manier. Klik hier of er nog updates zijn.
De link verwijst naar een site van de maker, met in de URL een ?v=123123.43434 en de server weet of dat er een update is of niet :)

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Kale Kiwi
  • Registratie: Juli 2008
  • Laatst online: 14-09 18:25
Matis schreef op maandag 31 augustus 2009 @ 10:20:
[...]

Helemaal mee eens. *Alle* CMS componenten in Joomla doen het op exact dezelfde manier. Klik hier of er nog updates zijn.
De link verwijst naar een site van de maker, met in de URL een ?v=123123.43434 en de server weet of dat er een update is of niet :)
Ja en hoe roepen we die pagina dan aan? Moet dan toch alsnog via een cURL, fopen, weet ik veeel wat? :>

http://nl2.php.net/manual/en/function.file.php
http://nl2.php.net/manual/en/function.fread.php
http://nl2.php.net/manual/en/function.curl-init.php
http://nl2.php.net/manual/en/function.file-get-contents.php

.htaccess
code:
1
php_value allow_url_fopen on


PS: niet beledigend bedoelt ofzo, maar weet je zeker dat je een CMS gaat maken als je zo weinig van PHP afweet?

[ Voor 35% gewijzigd door Kale Kiwi op 31-08-2009 10:40 . Reden: Code weggehaalt (staat allemaal in de php manual), links toegevoegt, htaccess bestand toegevoegt! ]


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 21:46

Matis

Rubber Rocket

The Yorick schreef op maandag 31 augustus 2009 @ 10:25:
[...]


Ja en hoe roepen we die pagina dan aan? Moet dan toch alsnog via een cURL, fopen, weet ik veeel wat? :>

Met fopen():
PHP:
1
2
3
4
5
6
7
<?php
// get contents of a file into a string
$filename = "http://www.mijnwebsite.nl/version.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
?> 
Dat zou eventueel ook nog kunnen, je kan ook op je CMD een pagina laten includen met een iframe ergens anders vandaan ;)

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Dat is waar, maar dan hou je de check ten minste bij jezelf. Mocht er ooit wat drastisch veranderen, kan je dat altijd bij jezelf regelen. Als je de check in je software houdt, en dus blij de klanten, is gewoon wat riskanter :)

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
The Yorick schreef op maandag 31 augustus 2009 @ 10:25:
PS: niet beledigend bedoelt ofzo, maar weet je zeker dat je een CMS gaat maken als je zo weinig van PHP afweet?
Ik maak dus geen CMS, probeer gewoon wat te experimenteren met extenties maken voor klanten voor Joomla! dus..
Ben na al jullie reacties nu wat PHP basis dingen aan het leren, altijd handig.. kom hier straks op terug.. :)

Bedankt voor jullie reacties en tijd tot nu toe!

[ Voor 5% gewijzigd door Verwijderd op 31-08-2009 19:50 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op maandag 31 augustus 2009 @ 19:49:

Ik maak dus geen CMS, probeer gewoon wat te experimenteren met extenties maken voor klanten voor Joomla! dus..
Ben na al jullie reacties nu wat PHP basis dingen aan het leren, altijd handig.. kom hier straks op terug.. :)

Bedankt voor jullie reacties en tijd tot nu toe!
Misschien handig om te weten: ongeveer 80-90% van de "hacks" die ik zie worden veroorzaakt door brakke Joomla modules. Als je de PHP basis niet kent moet je echt nog niet aan dit soort zaken beginnen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is maar om te testen, niet om uit te brengen..

Acties:
  • 0 Henk 'm!

  • naam
  • Registratie: Oktober 2007
  • Laatst online: 12-09 13:07
Is het geen mogelijkheid om het txt bestandje te includen in de update_check pagina?
zoiets als dit:

version.txt [Op jou server]
code:
1
2
3
<?php
    $latestVer = "0.9.6";
?>


update_check.php [op de server van de klant]
PHP:
1
2
3
4
5
6
7
8
9
10
$currentVer = "0.9.2";
include ('http://cms.jouserver.com/version.txt');
if ($currentVer != $latestVer)
{
    echo "Updateje nodig";
}
else
{
    // Doet lekker niets
}

[ Voor 3% gewijzigd door naam op 01-09-2009 10:26 ]


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Dat mag (meestal) niet
Warning

Windows versions of PHP prior to PHP 4.3.0 do not support access of remote files via this function, even if allow_url_fopen is enabled.

[ Voor 78% gewijzigd door Guillome op 01-09-2009 10:33 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Windows versies van PHP voor versie 4.3.0. Hoeveel van die antieke situaties denk je nog tegen te komen in de praktijk? Ik gok op nul.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Er zijn al genoeg manieren genoemd hoor, dus TS mag eerst wat proberen te bouwen. :)

{signature}


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Precies. En @huhu, gaat vooral om de "even if allow_url_fopen is enabled."
Die staat meestal op disabled

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router

Pagina: 1