Ausgliederung aus dem Thema:
länderaddon update
Danke, hab Update gemacht :)
Druckbare Version
Ausgliederung aus dem Thema:
länderaddon update
Danke, hab Update gemacht :)
last update.php
interessant ist dabei, dass die zeit auch als timestamp zur verfügung steht!PHP-Code:
<?
function getRawHttpHeader($host,$doc)
{
$httpheader = "";
$fp = fsockopen ($host, 80, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($errno) \n";
}
else
{
fputs ($fp, "GET $doc HTTP/1.0\r\nHost: " . $host. "\r\n\r\n");
while (!feof($fp))
{
$httpresult = fgets ($fp,1024);
$httpheader = $httpheader.$httpresult;
if (ereg("^\r\n",$httpresult))
break;
}
fclose ($fp);
}
return $httpheader;
}
function getArrayHttpHeader($url)
{
$url = ereg_replace("http://","",$url);
$endHostPos = strpos($url,"/");
if (!$endHostPos)
$endHostPos = strlen($url);
$host = substr($url,0,$endHostPos);
$doc = substr($url,$endHostPos,strlen($url)-$endHostPos);
if ($doc=="")
$doc = "/";
$raw = getRawHttpHeader($host,$doc);
$tmpArray = explode("\n",$raw);
for ($i=0;$i<sizeof($tmpArray); $i++)
{
@list($name, $value) = explode(':', $tmpArray[$i], 2);
$array[trim($name)]=trim($value);
}
return $array;
}
$array = (getArrayHttpHeader("http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip"));
// print_r($array);
// Display last updated timestamp
echo date("j F Y",strtotime($array['Last-Modified']));
?>
wget -q -N -P /tmp http://ip-to-country.webhosting.info...ountry.csv.zip
ist auch ganz nett :) lädt das file runter in tmp, wenn eine neue version verfügbar ist.
Gruß
:D
Könnte man doch dann auch so proggen das wenn eine neue Version verfügbar ist, das Ding automatisch updated ;)
wollt ich mich gerad dransetzen :)
aber ich erkenne aus deinem post raus, dass du dich bereiterklärst das zu übernehmen :)
/edit: da es doch nicht so einfach ist wie ich es mir vorgestellt habe, darfst du dich defenitiv der sache hingeben :D
hatte mir überlegt einfach
a) timestamp vom letzten update in TABLE `laendercode` zu speichern
b) bei neuer datei:
system/shell_exec("wget -q -N -P ".getcwd()." http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip");
system/shell_exec("gunzip ip-to-country.csv.gz");
und dann halt den cron laufen zu lassen....
in der theorie sollte das doch gehen?!
Theoretisch sollte das gehen, allerdings sollte mane ine Lösung suchen ohne exec/system denn die wenigsten Hoster schalten den Endkunden exec frei.
hm, dann so vllt (php5)
LASTUPDATE = timestamp der letzten aktualisierungPHP-Code:
//unzip with PHP 5.2.0 or later (zlib)
function unzip($file)
{
$zip = new ZipArchive();
if ($zip->open($file) === TRUE) {
$zip->extractTo('./');
$zip->close();
echo 'Erfolgreich entzippt';
} else {
echo 'Konnte Zip nicht öffnen';
}
}
function getRawHttpHeader($host,$doc)
{
$httpheader = "";
$fp = fsockopen ($host, 80, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($errno) \n";
}
else
{
fputs ($fp, "GET $doc HTTP/1.0\r\nHost: " . $host. "\r\n\r\n");
while (!feof($fp))
{
$httpresult = fgets ($fp,1024);
$httpheader = $httpheader.$httpresult;
if (ereg("^\r\n",$httpresult))
break;
}
fclose ($fp);
}
return $httpheader;
}
function getArrayHttpHeader($url)
{
$url = ereg_replace("http://","",$url);
$endHostPos = strpos($url,"/");
if (!$endHostPos)
$endHostPos = strlen($url);
$host = substr($url,0,$endHostPos);
$doc = substr($url,$endHostPos,strlen($url)-$endHostPos);
if ($doc=="")
$doc = "/";
$raw = getRawHttpHeader($host,$doc);
$tmpArray = explode("\n",$raw);
for ($i=0;$i<sizeof($tmpArray); $i++)
{
@list($name, $value) = explode(':', $tmpArray[$i], 2);
$array[trim($name)]=trim($value);
}
return $array;
}
$array = (getArrayHttpHeader("http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip"));
if (strtotime($array['Last-Modified'])> LASTUPDATE)
{
//Kopiere und entpacke neues update
if (copy("http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip","ip-to-country.csv.zip"))
{
unzip("ip-to-country.csv.zip");
}
require(laenderupdate.int.php); // Cron ausführen
}
vllt kennt ja jmd von euch ne unzip-funktion die auch mit php4 funktioniert. war jetzt zu faul zu googlen :D
Ahh, das mit dem automatischen Update hab ich noch gar nicht bedacht:frusty:
Ich hatte mir vor 2 Tagen einen Cron geschrieben, der herunterlädt, automatisch entpackt und in die Datenbank lädt, aber ein automatisches Update oder das Ersparen der ganzen Schritte wär vl. auch nicht schlecht:yes:
*working*
so da ja alle hier so auf updatewahn sind meine version ist von september 08 und bisher kennt sie alle ip's so mal nebenbei.
Ich empfehle jedem User bzw Admin solange es keine problehme gibt das ip's die tatsächlich aus deutschland kommen nicht erkannt werden, gar kein Update zu machen.
MFg Lokutos
*dieser beitrag ist die persönliche meinung
vor allem ist es ja auch nicht so, dass man sich hier bei nem update was kaputtspielen kann, also..immer schön updaten ! :D
Grad gestern lud ich neueste Version herunter, und heute wieder eine :der:
Aber Danke! :thumb:
sei doch froh ! :D
Selbst dann würde das ja nicht ausschliessen, dass sowas auch bei anderen Quellen mal vorkommen kann.
nicht nur eines sondern meine wenigkeit
Thx an AIN die bei der suche behilflich wahren.
ja wahr tatsächlich so
ich bin Nicht EU bürger habe eine 100% schweizer ip (basel) (fixe ip)
wurde als europa dort gelistet.
ist vorallem genial wenn man den v-check als webmaster testen will und
tuten blasen drehen und wenden kann wie man will v-check 0% *grins:der:
ich persönlich habe eine ip liste auf meiner seite von 08
und werde diese updaten sobald es problehme gibt warum auch vorher.
MFG Lokutos
Mal merker setzen :thumb:
Danke :)
5 dsn sterne für die einstellung, schade haben kein klamm bewertungs sysrtem
5 dsn sterne sind glaube eh besser als so klammer ding
DimpleX
Mal ne Frage wegen der Update Automatik...
Habt ihr das nun mal Fertig entwickelt ?
Ich habe erst kürzlich mal manuell ein Update gemacht da ich selber nicht mehr in den Klickbereich gekommen bin ....
Wäre dankbar für Infos
Ich weiss nich was ich diesmal falsch gemacht hab, aber ich bin diesmal leider auch Engländer. *g*
EDIT: Ok,mit dem vorherigen Update isses wieder ok. Welches Land ich genau hatte weiss ich nicht, nur war es weder DE,AT noch CH.
EDIT2. Nachdem ich alles nochmal aktualisiert hab mit den neuesten Datein bin ich wieder deutsch *freu*
keine Ahnung worans nun gelegen hat.
MFG
Ui, ich habe immer gedacht das ich Deutscher bin.. Nun ist es ofiziell ich bin ein Chinese :thumb:
Nein, ist mir dann doch wieder zu viel arbeit, aber wenn Du mir sagen kannst wo ich Reis herbekomme wo ich in einer Mikrowelle machen kann, werde ich das nachholen :biggrin1:.. Mich würde das das auch interessieren ob man da schon etwas hast das es beim Vms automatisch updatet.
Man kann hier:
http://www.designerscripte.net/downl...do=file&id=169
in die Cron Datei, die ja davon ausgeht, dass der Webbi die aktuelle ip-to-country.csv runterlädt und aufm Webspace deponiert, das runterladen & entpacken integrieren:
Unoptimierter Beispielcode, darf und sollte natürlich nach Bedarf angepasst werden!PHP-Code:
$handle = fopen("http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip","r");
if($handle){
$handle2 = fopen("./crons/ip-to-country.csv.zip","w");
if($handle2){
while (!feof($handle)){
fwrite($handle2,fread($handle, 1024));
}
fclose($handle2);
}else echo 'fehler2';
fclose($handle);
}else echo 'fehler';
/* austauschen nach bedarf */
$zip = new ZipArchive;
$zip->open('./crons/ip-to-country.csv.zip');
$zip->extractTo('./crons/');
$zip->close();
/* austauschen nach bedarf */
ZIP Erweiterung hat halt nicht jeder:
http://www.php.net/manual/de/refs.compression.php
Evtl. auch extra Script runterladen dazu:
http://phpclasses.waaf.net/browse/class/42.html
Warning: fopen(./crons/ip-to-country.csv.zip): failed to open stream: Permission denied in /srv/www/htdocs/web177/html/vms/crons/laenderupdate.int.php on line 5
fehler2
Fatal error: Cannot instantiate non-existent class: ziparchive in /srv/www/htdocs/web177/html/vms/crons/laenderupdate.int.php on line 16
Was muss ich da an rechten geben ?
Ich will ja nicht grade ein Lock aufmachen das Jeder zugriff hat...
Wie sehe ich ob ich Zip erweiterung habe ?
Grüße Thomas
Du könntest entweder die beiden Dateien (leer) anlegen, und dann jeder 666 geben.
Oder dem ganzen Ordner crons 777, aber eher unschön.
Am besten extra Ordner erstellen (ips bspw.), dem dann 777, im Code Pfade entsprechend anpassen, den Ordnerinhalt via .htaccess vor Zugriff "von aussen" schützen.
-> Hast du wohl nicht.Zitat:
Cannot instantiate non-existent class: ziparchive
Das ist wohl auch der Grund, warum keiner wirklich Lust hat, da ein Addon zu schreiben, wegen dem Supportaufkommen. Selbst wenn man eine Klasse beilegt, Pfade/Rechte/php4 Unterstützung usw. alles Aufwand :biggrin1:
Ordner habe ich angelegt und Pfade angepasst.
Der Download geht jetzt super.
Wenn ich Zip nicht habe...
Fatal error: Cannot instantiate non-existent class: ziparchive in /srv/www/htdocs/web177/html/vms/crons/laenderupdate.int.php on line 16
Wie kann ich die Zip denn entpacken lassen ?
Gibts da keine art erweiterung die ich auf meinem Space einrichten kann ?
Du kannst entweder mal in der Ausgabe von phpinfo() nachschau'n, ob eine passende Erweiterung installiert ist oder deinem Hoster mal den Link schicken:
http://www.php.net/manual/de/book.zip.php
Dass er das installiert :wink:
Oder du holst dir da eine PHP-Klasse
http://phpclasses.waaf.net/browse/class/42.html
(Anmeldung nötig, lohnt sich aber :thumb:)
Dokumentation und Beispiele sind eigentlich immer dabei, dafür kann ich aber keine genaue Anleitung geben, hab die ja noch nicht alle ausprobiert :biggrin1:
EDIT: oder wenn dir PEAR etwas sagt, da bekommt man sowas auch.
Evtl. nur die Funktionen:
http://www.php.net/manual/de/ref.zip.php
Probiers mal so.PHP-Code:
/* austauschen nach bedarf */
$zip = zip_open('./crons/ip-to-country.csv.zip');
$entry = zip_read($zip);
zip_entry_open($zip, $entry, "r");
$fd = fopen('./crons/'.zip_entry_name($entry), 'w+');
fwrite($fd, zip_entry_read($entry, zip_entry_filesize($entry)));
fclose($fd);
zip_entry_close($entry);
zip_close($zip);
/* austauschen nach bedarf */
kann man den Thread weiterhin nur für updates beibehalten da es ein wenig störend ist wenn man immer das neueste update haben will und da supportsachen zwischen drin sind und man erst suchen muss :biggrin1:
schau mal bitte in die php-info, hast du nicht so eine Datei leg sie dir an, sie hat als Inhalt den befehl phpinfo();
schau dann bitte, ob safe_mode auf off ist, das Ganze läuft nur mit safe_mode Off
Dies ist zumindest meine Erfahrung von 4 Servern, auf 3 lief mein script ohne Probleme, auf einem nicht...safe_mode geändert und seither habe ich eine Länderdateiautomatik:biggrin1:
Danke für die Info :) muss ich gleich mel updaten? Mit welchem Cron macht ihr das eigentlich? Habe vor kurzem mal einen geschrieben, welcher viel performanter ist wie der von zement. Jedoch nutze ich kein VMS. Ich könnte allerdings den Cron hier mal posten.
lasse ich 1 mal wöchentlich laufenPHP-Code:
<?php
$handle = fopen("http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip","r");
if($handle){
$handle2 = fopen("./crons/ip-to-country.csv.zip","w");
if($handle2){
while (!feof($handle)){
fwrite($handle2,fread($handle, 1024));
}
fclose($handle2);
}
fclose($handle);
}
$zip = new ZipArchive;
$zip->open('./crons/ip-to-country.csv.zip');
$zip->extractTo('./crons/');
$zip->close();
mysql_query("TRUNCATE TABLE laendercode");
$returned='';
$fp=@fopen($_SERVER['DOCUMENT_ROOT'].'/crons/ip-to-country.csv',"r");
if($fp){
while($line=fgets($fp,1000)){
$line = str_replace("\"","",$line);
$werte_array=split(",",$line);
$anfuegen = db_query("INSERT INTO laendercode (IP_FROM, IP_TO, CC2, CC3, land) values ('$werte_array[0]','$werte_array[1]','$werte_array[2]','$werte_array[3]','$werte_array[4]')");
}
fclose($fp);
}
db_query ("UPDATE ".$db_prefix."_crons SET laufzeit = '".time()."' WHERE bezeichnung = 'Laendercode-DateiUpdate'");
?>
weil das eine mal bisschen arbeit für den server darauf sch... ich
so ist es sicherlich immer aktuell
Ich optimiere meinen später und poste ihn hier. Der ist noch besser 8-)
ich poste gerne mal meinen cron, den ich 1 mal wöchentlich laufen lasse.
Vorraussetzungen sind:
safe_mode off
zip und ungezippte Dateien im hauptverzeichnis müssen vorhanden sein
Bin für Verbesserunge natrlich offen.PHP-Code:
<?php
@require_once ('lib/functions.lib.php');
//@require_once ('lib/layout.lib.php');
error_reporting(E_ALL);
//head("");
//unzip with PHP 5.2.0 or later (zlib)
function unzip($file) {
$zip = new ZipArchive();
if ($zip->open($file) === TRUE) {
$zip->extractTo('./');
$zip->close();
echo 'Erfolgreich entzippt';
} else {
echo 'Konnte Zip nicht öffnen';
}
}
function getRawHttpHeader($host,$doc) {
$httpheader = "";
$fp = fsockopen ($host, 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno) \n";
} else {
fputs ($fp, "GET $doc HTTP/1.0\r\nHost: " . $host. "\r\n\r\n");
while (!feof($fp)) {
$httpresult = fgets ($fp,1024);
$httpheader = $httpheader.$httpresult;
if (ereg("^\r\n",$httpresult)) break;
}
fclose ($fp);
}
return $httpheader;
}
function getArrayHttpHeader($url) {
$url = ereg_replace("http://","",$url);
$endHostPos = strpos($url,"/");
if (!$endHostPos) $endHostPos = strlen($url);
$host = substr($url,0,$endHostPos);
$doc = substr($url,$endHostPos,strlen($url)-$endHostPos);
if ($doc=="") $doc = "/";
$raw = getRawHttpHeader($host,$doc);
$tmpArray = explode("\n",$raw);
for ($i=0;$i<sizeof($tmpArray); $i++) {
@list($name, $value) = explode(':', $tmpArray[$i], 2);
$array[trim($name)]=trim($value);
}
return $array;
}
$filename = 'ip-to-country.csv.zip';
if (file_exists($filename)) {
$falt = date("Y.m.d", filemtime($filename));
echo $falt.' letztes Update<br>';
}
$array = (getArrayHttpHeader("http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip"));
// print_r($array);
// Display last updated timestamp
$fneu = date("Y.m.d",strtotime($array['Last-Modified']));
echo $fneu.' neueste Update<br>';
if ($fneu > $falt) {
//Kopiere und entpacke neues update
if (copy("http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip","ip-to-country.csv.zip")) {
unzip("ip-to-country.csv.zip");
echo '<br>hier cron<br>';
db_connect ();
$delete = db_query("TRUNCATE TABLE laendercode");
$returned='';
$fp=@fopen($_SERVER['DOCUMENT_ROOT'].'/ip-to-country.csv',"r");
if($fp){
while($line=fgets($fp,1000)){
$line = str_replace("\"","",$line);
$werte_array=split(",",$line);
$anfuegen = db_query("INSERT INTO laendercode (IP_FROM, IP_TO, CC2, CC3, land) values ('$werte_array[0]','$werte_array[1]','$werte_array[2]','$werte_array[3]','$werte_array[4]')");
//echo "$werte_array[0],$werte_array[1],$werte_array[2],$werte_array[3],$werte_array[4] <br>";
}
fclose($fp);
}
$test = mysql_fetch_array(db_query("SELECT COUNT(*) as summe FROM laendercode"));
echo $test['summe'].'DB-Einträge<br>';
// Zeit setzen
db_query ("UPDATE ".$db_prefix."_crons SET laufzeit = '".time()."' WHERE bezeichnung = 'Laendercode-DateiUpdate'");
db_close();
}
} else {
echo 'Update war nicht erforderlich.<br>';
}
echo 'here is the end';
//foot();
?>
Also im letzten Update war irgendwie der Wurm drin.. jetzt sind User dabei die ich vorher schon drin hatte und wo auch deutsch da stand auf einmal aus Polen und Ukraine ? :bump2: bin mal auf das nächste update gespannt und bevor ich sperr check ich doch lieber doppelt hehe
zb 264399 und 366113 sind schon länger bei mir und erst seit dem letzten update angeblich ausländer hat die jemand vielleicht noch mit dem alten update drin um das mal abzugleichen ?