Datei auslesen mit file() und einzelne Zeilen aufteilen

PHP:
$handle = fopen ("../admins_simple.ini","r");              
while ( ($file_array = fgetcsv ($handle, 1000, " ", '"')) !== FALSE ) { 
 
//print_r($file_array[2]); // wird der der name //ARRAY ausgegeben

$arr[2] = str_replace( '//', '', $file_array[2] );  
$arr = array($arr[2]);

print $arr.'<br>'; // wird nur ARRAY ausgegeben

print $arr[2].'<br>'; // wird nichts angezeigt
}

Seltsam - nun wird keine Information mehr ausgegeben - das ergibt doch keinen Sinn! Habe jetzt mal die einzelnen Schritte durchlaufen lassen - entweder kommt ARRAY, Nichts oder eine Resource id #3!
 
Kann ich mir nicht vorstellen, dass das gut sein soll! :rolleyes:

Mit den folgenden Ausgaben (print_r und var_dump) erhalte ich:

Array ( [0] => ) array(1) { [0]=> string(0) "" } NULL Array ( [0] => ) array(1) { [0]=> string(0) "" } NULL Array ( [0] => ) array(1) { [0]=> string(0) "" } NULL Array ( [0] => ) array(1) { [0]=> string(0) "" } NULL

Ich find einfach nicht den Fehler! :(
 
Hallo hallo. Langsam.
Alles schön der Reihe nach.

Dein Dateiinhalt (auf die erste Zeile sei gesch...):
Code:
"STEAM_0:2:43278" "cde" // Bert
"STEAM_0:1:14236" "ghf" //Hans
"STEAM_0:1:234778" "acf" // Fred

Erster Schritt:
PHP:
$handle = fopen ("../datei.csv","r");              
while ($data = fgetcsv ($handle, 1000, " ", '"'))
{ 
  var_dump($data);
}

Ausgabe ansehen (hier mal nur skizziert):
Array (
[0] => STEAM_0:2:43278
[1] => cde
[2] => //
[3] => Bert
)

Array (
[0] => STEAM_0:1:14236
[1] => ghf
[2] => //Hans
)

Array (
[0] => STEAM_0:2:43278
[1] => acf
[2] => //
[3] => Fred
)

Man beachte den Unterschied für den zweiten Eintrag. Das ist logisch. Man trenne den zweiten Eintrag mal per Hand anhand der Leerzeichen:
"STEAM_0:1:14236"?"ghf"?//Hans

"STEAM_0:1:14236"
"ghf"
//Hans
(das ist einer der Punkte die euch nun um die Ohren fliegen)

Mal ist der Name als drittes, mal als viertes Element. Aber er ist immer am Ende. Da hilft uns unter anderem array_pop:
PHP:
$handle = fopen ("../datei.csv","r");              
while ($data = fgetcsv ($handle, 1000, " ", '"'))
{ 
  $name = array_pop($data);
}

Natürlich wollen wir keine "//" am Anfang wenn da welche sind:
PHP:
$name = array_pop($data);
if (substr($name, 0, 2) === "//")
{
  $name = substr($name, 2);
}
Ein kompletter str_replace würde aus dem Namen "//Foo//Bar" den Namen "FooBar" machen und ist nicht in unserem Sinn, da es den eigentlichen Namen verfälscht.

Nach ein paar Wochen findet sich auf einmal folgendes:
"STEAM_0:1:12345" "xyz" // //Ha//ns//
Das "//" Am Anfang scheint wohl zum Namen dazu zu gehören, also erweitern wir unsere Bedingung dahingehend:
Code:
substr($name, 0, 2) === "//" && $data[2] != "//"

Hiernach kommen noch endlose Ausnahmen. Dies hier aber reicht ohne Betrachtung der Allgemeinheit - oder wie auch immer die Mathematiker sagen ;) Ich sag: FERTIG und q.e.d. ! :D
 
Zuletzt bearbeitet:
Danke schon mal an dieser Stelle. Ich werde es mal entsprechend einfügen und ausprobieren.

Für den Gameserver spielt nur die Steamid und die rechte eine Rolle. Der auskommentierte Name hat ja nicht wirklich eine Bedeutung - dient nur zur erleichterten Zuordnung.

Aber nach reichlicher Überlegung frage ich mich ob der Weg den ich jetzt hier im Skript eingeschlagen habe der richtige ist - ob es nicht viel einfachere Möglichkeiten gibt.

Denkbar wäre natürlich auch die Sache über die Steamid laufen zu lassen die separat noch in der Datenbank gespeichert wird und zur Zuordnung für Namen und Rechte dienen könnte.
 
Hallo!
Ich bin einen Schritt weiter gekommen. Ich kann jetzt das File so auslesen bzw. aufteilen wie ich es haben wollte.

PHP:
$datei = "intern/admins_simple.ini"; // Name der Datei
$array = file($datei); // Datei in ein Array einlesen

foreach ($array as $element) {

 list($steam, $levels, $outcomm, $name) = explode(" ", $element);
 echo "<tr>";
 echo "<td>$steam</td>";
 echo "<td>$levels</td>";
 echo "<td>$name</td>";
 echo "</tr>";

}

Jetzt wird das ganze aber in Anführungszeichen ausgegeben - die würde ich aber gerne entfernen. Habe folgendes Versucht:

PHP:
$array = file($datei); // Datei in ein Array einlesen

$arr =  str_replace( '"', ' ', $array ); // Anführungszeichen entfernen

foreach ($arr as $element) {

Leider wird nur noch der erste Teil ($steam) ausgegeben ohne Anführungszeichen. Die Übergabe in ein neues Array() hatte keinen Erfolg.
 
Danke, habe es gerade hinbekommen:

PHP:
$datei = "intern/admins_simple.ini"; // Name der Datei
$array = file($datei); // Datei in ein Array einlesen

$arr =  str_replace( '"', '', $array );

foreach ($arr as $element) {
 list($steam, $levels, $outcomm, $name) = explode(" ", $element);
 echo '<tr>';
 echo '<td>'.str_replace( '"', '', $steam ).'</td>';
 echo '<td>'.str_replace( '"', '', $levels ).'</td>';
 echo '<td>'.str_replace( '"', '', $name ).'</td>';
 echo '</tr>';
}
 
Zuletzt bearbeitet:
Zurück