array_diff + exec
Jeod87
- php
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
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>
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
trim ($String); hat Abhilfe geschoffen...
thema exec bin ich allerdings immernoch über Hilfe dankbar!
danke
gruß
jeod
chdir(); hat auch das problem gelöst!
trotzdem danke :)
hoffe es hilft den googlern :)
gn8
jeod
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,
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
'ǝɯɐ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