• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Pfadangabe zu txt datei

alexander912

Neues Mitglied
Heyho,
mal wieder ne kleine Frage.

So sieht der Code aus:
PHP:
<?php
$array = file("mitschnitte.txt");
$index = 1;
$link = 2;
foreach($array as $zeile)
{
if($index == $link)
{
echo "<a href='",$zeile,"'>",$zeile,"</a><br>";        
$link = $link + 4;
}
else
{
echo $zeile;
echo "<br>";
}
$index++;
}
?>
Ich will in Zeile zwei, wo die mitschnitte.txt datei angegeben wird, beschreiben, das die Datei nicht im selben ordner ist sondern im ordner admin. Dachte ja das es mit dem folgenden Code geht:
$array = file("/admin/mitschnitte.txt");
Geht leider net ;-)

Wie wird das richtig geschrieben ?

Viele Grüße und vielen Dank !
Alex
 
Werbung:
Werbung:
Ob das zweite geht hab ich jdetzt noch net getest, aber habs jetzt auch so gelöst bekommen:
$fileURL = "media/mitschnitte/mitschnitte.txt";
$array = file($fileURL);

Vielen danke euch beiden für die Hilfe :-)
 
Unnötig! So Sparst du eine Zeile und es hat den selben effekt:
$array = file("media/mitschnitte/mitschnitte.txt");

denn $fileUrl hat ja den wert media/mitschnitte/mitschnitte.txt welcher dann sozusagen "eingesetzt" wird.
 
$array = file("media/mitschnitte/mitschnitte.txt");
Dies hab ich vorher auch schon ausprobiert gehabt, hatte aber net gefunzt. Aber ich probiers gerne nochmal um mich dem Gegenteil zu überzeugen.
 
Werbung:
Unnötig! So Sparst du eine Zeile und es hat den selben effekt:
Aber wenn er den Dateinamen später nochmal braucht, ist die Lösung mit der Variable besser, sollte der sich ändern, muss er das nur an einer zentralen Stelle abändern. :-)
 
php erlaubt auch solche konstrukte

$fileHandel = file($filename = 'media/mitschnitte/mitschnitte.txt');
 
Werbung:
Nur weil etwas funktioniert, muss es noch lange nicht die empfehlenswerteste Loesung sein.

Leute, was stoeren euch immer einzelne Zeilen die ihr einspart? Man "koennte" auch den gesamten Quellcode in eine einzige Zeile schreiben. Warum sollte man das nicht machen? Weils dann alles unuebersichtlich wird! Klar, Code sollte kurz gehalten sein, aber nicht doch zu ungunsten der Lesbarkeit, da findet man sich doch nie wieder zurecht.


Im uebrigen ist hier die Verwendung einer Variablen durchaus sinnvoll. Er nuetzt das file doch an mindestens zwei Stellen, einmal beim schreiben und einmal beim auslesen. Wenn er nun die Datei anders benennen will oder seine Ordnerstruktur anpassen will, darf er durch seinen gesamten Code gehen und suchen, wo dieser Dateiname verwendet wird. Viel einfacher waere es, den Dateipfad in eine einzige config-Datei zu schreiben, diese einzubinden und den Pfad daraus zu verwenden. Will man ihn nun anpassen, muss man das nur einmal in dem globalen config-file machen.
 
[Offtopic]

Commodore schrieb:
Nur weil etwas funktioniert, muss es noch lange nicht die empfehlenswerteste Loesung sein.

Dein Wort in Gottes Ohr. :?

In diesem Fall: Das Nutzen des "Seiteneffekts" einer Zuweisung mag unter gewissen Umständen sinnvoll (oder zumindest gebräuchlich sein) sein[1], oft ist es aber so -- meiner Meinung nach -- idiosynkratisch wie in #9 und widerspricht diversen Stil-Empfehlungen oder auch dem KISS-Prinzip.

Ich gebe mal ein Extrembeispiel:

PHP:
function filter_username($val) {
	return !($val = filter_text($val)) || $val !== str_replace(array(
		// non-printing ascii
		chr(0), chr(1), chr(2), chr(3), chr(4), chr(5), chr(6), chr(7), chr(8), chr(9), chr(10), chr(11), chr(12), chr(13), chr(14), chr(15), chr(16), chr(17), chr(18), chr(19), chr(20), chr(21), chr(22), chr(23), chr(24), chr(25), chr(26), chr(27), chr(28), chr(29), chr(30), chr(31), chr(127), chr(129), chr(141), chr(143), chr(144), chr(157),
		// our prohibited chars
		chr(160),// non-breaking space
		chr(173),// soft hyphen
		), '', $val) ? '' : $val;
}

Das ist einfach ein riesiges "F*ck You" in Richtung eines potentiellen Lesers.

Nicht gar so abgedreht:

PHP:
return $list[floor($tmp / 10) + 1][]=$e;

Auf den ersten Blick: Was gibt diese return-Anweisung zurück? Richtig, den Inhalt von $list. Das erfährt man aber erst am viertletzten Zeichen der Zeile. Und selbst dort gilt es noch zu überlegen, ob eigentlich eine Bedingung gemeint sein soll (==) oder tatsächlich eine Zuweisung (=).

An den Stellen, an denen mit Seiteneffekten gearbeitet wird, stehen nämlich alternativ häufig Bedingungen.[2] Da liegt der Verdacht nah, dass ein Gleichheitszeichen vergessen wurde.

PHP:
$list[floor($tmp / 10) + 1][]=$e;
return $list;

Etwas offensichtlicher, was hier zurückgegeben wird, oder? (Die obere Zeile ist immer noch etwas kompliziert, aber das ist ein anderes Thema.)

Wenn ich sowas sehe (Beispiel fiktiv)...

PHP:
function test()
{
    $ret           = 0;
    $options       = getOptions();
    $fileHandel    = file($filename = 'media/mitschnitte/mitschnitte.txt');
    $parsedContent = irgendwas($fileHandel, $options);    
    foreach ($parsedContent as $line) {
        $ret += $line;
    }
    echo $filename . ' geladen.';
    return $ret;
}

...ist mein erster Verdacht, dass dort in der echo-Zeile der Wert einer Variable ausgegeben werden soll, die nicht initialisiert wurde, weil ich sie in keiner Zeile ganz links stehen sehe. Ich halte das für einen potentiellen Bug und beginne damit, ihn zu suchen.

Klar, in diesem Fall ist es vielleicht noch trivial und es mag wie gesagt sinnvolle Einsatzmöglichkeiten geben. Aber bitte postet nicht einfach kommentarlos irgendwelche alternativen Codeschnippsel, die zwar syntaktisch gültig sind, die aber schlichtweg keinen "sauberen" oder besonders geschickten Code ergeben. (Ich weiß, dass die Beurteilung letztlich auch subjektiv ist, aber ich denke, gewisse "objektivere" Grenzen gibt es da durchaus.)

Erfahrenere Programmierer kommen mit sowas natürlich klar, aber gerade sie reagieren besonders allergisch auf alles, was das Verständnis erschwert, denn das Eindenken in größere Codeabschnitte kostet ohnehin schon genug Zeit und Energie.

Die eingangs erwähnte filter_username()-Funktion disqualifiziert den Autor zum Beispiel in meinen Augen völlig. (Ich habe sie übrigens bis heute nicht genau durchgesehen.) Auch weil ich an die denken musste, habe ich das hier mal so ausführlich formuliert. ;) Ich habe das, was Commodores Zitat besagt, hier an anderen Stellen im Forum schon gedacht, wollte (und will) aber nicht immer eine Diskussion anzetteln (es sind ja in der Regel auch Kleinigkeiten, überinterpretiert das bitte nicht :)). Aber irgendwo musste ich meinen Senf mal loswerden.

Weil es so schön war:

Nur weil etwas funktioniert, muss es noch lange nicht die empfehlenswerteste Loesung sein.



1: Ich denke konkret an while-Schleifen:

PHP:
while ($row = mysql_fetch_assoc($result)) {
    // ...
}

Alternative:

PHP:
$row = mysql_fetch_assoc($result);
while ($row) {
    // ...
    $row = mysql_fetch_assoc($result);
}


2: Um der Verwechslungsgefahr (bzw. auch der Vergessensgefahr ;)) vorzubeugen, können etliche Bedingungen "umgedreht" formuliert werden:

PHP:
if ('Hello World' == $var)

Ein vergessenes Gleichheitszeichen würde zu einem Syntax-Fehler führen.
 
Werbung:
natürlich sollte man auf die lesbarkeit achten, sinn macht es nicht immer und sollte mit vorsicht genossen werden.

gefühlt sinde ich diese schreibweise ganz schlimm:

PHP:
if ('Hello World' == $var)

was passiert wohl wenn der text plötzlich doch was länger wird?, wird total unübersichtlich.

PHP:
$row = mysql_fetch_assoc($result);
while ($row) {
    // ...
    $row = mysql_fetch_assoc($result);
}

geht auch garnicht, der schleifenkörper ist doch absichtlich ein "teil der funktion", es macht den vorgang der schleife undurchsichtig.
ich wäre da sehr vorsichtig, dass im body nicht plötzlich row auf false oder so gesetzt wird.

Man muss halt aufpassen wo eine if abfrage aufhört und wo try catch anfängt, generell kann man die wildesten sachen darin machen.

probleme mit unnötigen speicher kann man auch wunderbar mit referenzen umgehen, ich arbeite sehr sehr viel mit referenzen, wozu sollte ich auch immer kopieren ? :)
 
gefühlt sinde ich diese schreibweise ganz schlimm:

Ich finde, sie widersprechen der "jemand ist etwas"-Denkweise, denn sie lesen sich ja mehr oder weniger als "etwas ist jemand". Manche schwören drauf, mir ist's mehr oder weniger egal (genau wie "++$i;" oder "$i++;"). Das mit den langen Strings stimmt.

while() geht auch garnicht

War deshalb auch ein Beispiel für sinnvollen Einsatz von Zuweisungen in Bedingungen.

probleme mit unnötigen speicher kann man auch wunderbar mit referenzen umgehen, ich arbeite sehr sehr viel mit referenzen, wozu sollte ich auch immer kopieren ?

PHP nutzt "copy on write", das heißt, der Inhalt einer Variablen wird erst dann physisch kopiert, wenn an Original oder Kopie etwas verändert wird. Davor wird die Kopie intern wie eine Referenz gehandhabt.

PHP:
$a = 'Hallo Welt';

function f(&$a) {
    echo $a;
}

function g($a) {
    echo $a;
}

g() braucht nicht mehr Speicher als f().
 
Zurück
Oben