Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Datei einlesen fsockopen komische Zeilen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Datei einlesen fsockopen komische Zeilen


 
mgutt
22-06-2006, 21:21 
 
Ich erstelle auf Server1 eine Datei wie folgt:

$sql = "SELECT ban_email
FROM " . BANLIST_TABLE;
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, "Could not obtain ban information.", '', __LINE__, __FILE__, $sql);
}

$data = array();

if ($row = $db->sql_fetchrow($result))
{
do
{
$data[] = $row;
}
while ($row = $db->sql_fetchrow($result));
$db->sql_freeresult($result);
}

print_r(serialize($data));

Auf Server2 lese ich die Daten von Server1 wieder ein wie folgt:
function read_spamdata()
{
$errno = 0;
$errstr = '';
if ($fsock = fsockopen('phpbb-de.com', 80, $errno, $errstr, 5))
{
fputs($fsock, "GET /filter.txt HTTP/1.1\r\n");
fputs($fsock, "HOST: phpbb-de.com\r\n");
fputs($fsock, "Connection: close\r\n\r\n");

$get_data = false;

while (!feof($fsock))
{
if ($get_data)
{
$spamdata .= fread($fsock, 1024);
}
else
{
if (fgets($fsock, 1024) == "\r\n")
{
$get_data = true;
}
}
}
fclose($fsock);
}
if ( !empty($spamdata) )
{
return $spamdata;
}
else
{
return false;
}
}

Der Inhalt der Datei insgesamt:
HTTP/1.1 200 OK
Date: Thu, 22 Jun 2006 18:15:44 GMT
Server: Apache/2.0.52
X-Powered-By: PHP/4.3.11 expires=Fri, 22-Jun-07 18:15:44 GMT;
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-1
ac3 a:55: {i:0;a:1: {s:9:"ban_email";s:11:"*@m-s-n.net";}i:6;a:1: {s:9:"ban_email";s:9:"*@mail.ru";}} 0

Durch die Filterung entfält der Header:
if (fgets($fsock, 1024) == "\r\n")
{
$get_data = true;
}

Aber am Anfang steht immer noch "ac3 " und am Ende " 0". Woher kommen diese Werte und wie werde ich sie los?

Gruß

 
bitesser
23-06-2006, 14:49 
 
Ja nun, Du holst Dir ja wohl auch immer eine Zeile der Rückgabedatei. Dementsprechend bekommst Du den gesamten Inhalt Deiner Serialized Daten.
Also hilft Dir da wohl nur ein Abschneiden vorne und hinten.
Aber warum machst Dud as überhaupt so kompliziert mit Sockets und haste nciht gesehen. Einfacher wäre doch,wenn der Server 1 eine ganz normale Textdatei erzeugt und Du beim Auslesen es mit einem normalen fopen machst. Dann hast Du die Dateilesefunktionen und alles wird viel einfacher.

Gruss Niels

 
mgutt
26-06-2006, 12:34 
 
Das geht nicht, weil Server2 manchmal "allow_url_fopen" deaktiviert hat. (Sicherheitseinstellung)

Wofür steht denn das "ac3 "? Wird genau diese Zeichenkette immer erstellt?

 
mgutt
05-07-2006, 21:59 
 
*bump*

 
combie
05-07-2006, 22:13 
 
Wofür steht denn das "ac3 "? Wird genau diese Zeichenkette immer erstellt?
evtl hilft dieses das zu erklären:
http://www.html-world.de/program/http_9.php

 
jahlives
06-07-2006, 07:58 
 
Was genau willst du denn aus der Textdatei schneiden ? ac3 und 0 stehen in der letzten Zeile der Datei.
Willst du denn nur die Header abschneiden und den Inhalt der Datei auf ne Var speichern ?

$check = false;
while(!feof($fsock)){
//der letzte Header sollte mit einem doppelten CRLF versehen sein
if(strpos('\r\n\r\n',fgets($fsock) !== false && $check === false){
$check = true;
}elseif($check === true){
$spamdata .= fgets($fsock);
}else{
continue;
}
}

So würde ich das probieren um die Header abzuschneiden.

Gruss

tobi

 
mgutt
10-07-2006, 21:05 
 
Naja im Endeffekt will ich einfach nur das was ich hier sehe:
http://phpbb-de.com/filter.txt

Ohne den Anfang (AC3) und das Ende (0) was ich beim Auslesen aufgetischt bekomme.

 
mäander_
10-07-2006, 21:19 
 
-
man (ich) sollte zuerst alles lesen

edit: ich denke auch ,dass dieser link von combie (http://www.html-world.de/program/http_9.php)eventuell hilft. Vielen Dank, interessanter hinweis.

 
jahlives
10-07-2006, 22:13 
 
Dann stelle doch fest ob 'ac3' im String vorkommt und schneide den Substring (alles zwischen ac3 und 0) heraus.

$spamdata = substr($spamdata,strpos($spamdata,'ac3')+4,strlen($spamdata)-1);

Gruss

tobi

 
mäander_
10-07-2006, 23:21 
 
Original geschrieben von jahlives
Dann stelle doch fest ob 'ac3' im String vorkommt und schneide den Substring (alles zwischen ac3 und 0) heraus.
rein so als Prognose würde ich es wagen dass dieser Spielzweig ein Irrweg wird.

 
mäander_
10-07-2006, 23:34 
 
Original geschrieben von mgutt
Wofür steht denn das "ac3 "? Wird genau diese Zeichenkette immer erstellt?
(a) ac3 steht für 2755
(b) nein

 
mgutt
16-08-2006, 12:39 
 
Die "chunked" Übertragung macht mir noch Kopfzerbrechen.

Kann es also passieren, dass mein Array in der Mitte "zerschnitten" wird und dann wieder eingeleitet wird mit dem Rest und jeweils mit der Angabe der Dateigröße?

So wie hier aufgelistet:
HTTP/1.1 200 OK
Server: Apache/1.3.27
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
Trailer: Cache-Control

ee1
[Die ersten 3809 Zeichen der Datei]

ffb
[Weitere 4091 Zeichen der Datei]

c40
[Die letzten 3136 Zeichen der Datei]

0
Cache-Control: no-cache

[Ende]

D.h. ich mache lieber ein preg_match und suche nach "\r\n" und nach einer Hexadezimalzahl mit 3-8 zeichen (zur begrenzung) gefolgt von einem zeilenumbruch?!

Nur ich weiß nicht was ich machen soll, wenn die Übertragung in mehreren Teilen stattgefunden hat :confused:

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:15 Uhr.