Jeod87: array_diff + exec

hallo allerseits... ich dreh gleich durch....

ich will eigentlich nur eine einzige zeile aus einer datei löschen... aber ich kriegs nicht hin... mittlerweile versuche ich es mit array_diff

echo ($id);  
  
                echo ($id[0]);  
                echo ($lines[0]);  
  
                $test = array_diff($lines , $id);  
  
                echo ($test [0]);  

wie kann es bitte sein, dass mir hier 3mal das selbe ausgegeben wird? array diff soll doch nur den Unterschied zurückgeben? aber in den beiden steht nur EIN element und zwar in jedem der beiden arrays das selbe!!! bitte helft mir :(

2. ich will mit exec einen variablen befehl ausführen... der user ist angemeldet und will auf seine eigenen hochgeladen dateien zugreifen. die php datei liegt aber natürlich in einem anderen verzeichniss... kann ich es mittels put env realisieren dass trotzdem nur der dateiname nötig ist? (nicht der gesamte (dem user unbekannte) pfad) habe dazu auch nichts gefunden.... danke schonmal

grüßle
jeod

  1. Hello,

    ich will eigentlich nur eine einzige zeile aus einer datei löschen... aber ich kriegs nicht hin... mittlerweile versuche ich es mit array_diff

    Von einer Datei kann ich hier nichts entdecken.

    echo ($id);

    echo ($id[0]);
      echo ($lines[0]);

    $test = array_diff($lines , $id);

    echo ($test [0]);

      
    Ist irgendwie doof, dass Du uns nur ein Stück Kot mit ein paar Echos zuwirfst und erwartest, dass wir nun wissen, was Du vorher schon alles gemacht hast mit den Variablen. Und ob es Skalare, Arrays oder Objekte sind, können wir auch nicht erkennen.  
      
    Also sammele dich nochmal, atme einmal tief durch und erkläre uns dann in normaler menschlicher Sprache und mehreren verständlichen Sätzen, möglichst inhaltlich sinnvoll sortiert, was denn die Aufgabe ist.  
      
    Als nächstes kannst Du dann deinen (vermeintlichen) Lösungsweg beschreiben, und vergiss bitte am Ende nicht, uns die Fehlermeldungen oder nicht erwarteten Ausgaben zur Verfügung zu stellen.  
      
      
    Auf 'Los' gehts los: Los!  
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
     ☻\_  
    /▌  
    / \ Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>
    
    1. okay... also ich rufe diese PHP auf indem ich mit dem ?STATUS=$iid eine id übergebe... (diese speichere ich dann in $id) die $iid bekomme ich auf der seite zuvor aus einer datei, wo diese als string hinterlegt ist... diese datei heißt beispielsweise noname_1.nm und in dieser datei steht nun noname_1 das lese ich aus und übergebe dies wie oben beschrieben...

      nun bin ich also in der datei, wo ich das eine element löschen möchte und das element steht $id...

      die datei lese ich nun mittel

      $lines = file ($filename)

      ein, was auch funktioniert... also in $lines[0] steht die erste zeile usw...

      nun will ich dass mir

      $lines = array_diff ($lines, $id) das gewünschte array liefert, was es aber nicht tut... (ich habe mal 2 mal die gleichen werte von hand reingeschrieben, dann hat es funktioniert...) also gehe ich davon aus dass die dateien aus irgendeinem grund nicht vom selben typ sind... ich habe aber auch schon versucht mit $id = (string)$id; und $lines[0] = (string) $lines[0] beides auf den selben type zu casten... ohne erfolg (in dem fall war nur eine zeile in der datei, ich bin mir bewusst, dass $...[0] nur das 1. element und nicht das gesamte array bearbeitet...

      sorry dass ich mich beim ersten mal nicht deutlicher ausgedrückt habe... ich hoffe mein problem ist nun deutlicher geworden und mir kann jemand helfen ;)

      viele grüße

      jeod

      1. trim ($String); hat Abhilfe geschoffen...

        thema exec bin ich allerdings immernoch über Hilfe dankbar!

        danke

        gruß
        jeod

        1. chdir(); hat auch das problem gelöst!

          trotzdem danke :)

          hoffe es hilft den googlern :)

          gn8
          jeod

      2. Hello,

        die datei lese ich nun mittels

        $lines = file ($filename)

        ein, was auch funktioniert... also in $lines[0] steht die erste zeile usw...

        Und schon sind wir bei der Frage, warum denn die Funktion file() benutzt wird, wo doch ggf. die Funktion fgetcsv() in einer Schleife viel besser geeignet wäre?

        Das hat mehrere Gründe:

        file() ist keine multiuserfeste Funktion, weil sie über Namen arbeitet und die Sperrung der Datei nur solange geschieht, wie der Dateistream gelesen wird.

        Siehe: http://aktuell.de.selfhtml.org/artikel/programmiertechnik/dateisperren/

        Das bedeutet also, dass Dein Konzept doppelt falsch ist.

        Außerdem liest file() die vorhandene Datei vollständig in den Speicher ein und zerteilt sie dabei in ein Array aus "Zeilen". Sowas kostet enorm viel Platz. Du wirst also bei größeren Dateien dabei an die Grenze des verfügbaren Speichers stoßen.

        Besser wäre es,

        • die alte Datei zu öffnen und gegen Veränderung von Anderen zu sperren
        • die alte Datei zeilenweise einzulesen und auch sofort wieder wegzuschreiben in eine neue Datei
        • die zu löschende Zeile einfach zu "unterschlagen" beim Wegschreiben in die neue Datei
        • die alte Datei zu löschen
        • die neue Datei umzubenennen

        Das hat Dir im Prinzip Shadowcrow schon grob beschrieben
        https://forum.selfhtml.org/?t=201355&m=1358210

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  2. 'ǝɯɐu$ ıɥ

    hallo allerseits... ich dreh gleich durch....

    ich will eigentlich nur eine einzige zeile aus einer datei löschen... aber ich kriegs nicht hin... mittlerweile versuche ich es mit array_diff

    alles in ein array einlesen, das element im array mit unset() abschießen und in eine leere temporäre datei schreiben, umbennenen fertig.

    ssnɹƃ
    ʍopɐɥs

    --
    !edis gnorw eht morf siht ta gnikool era uoY