Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
PHP Funktion Umschreiben
Michael_ Offline
Bier aus Hawaii

Beiträge: 1.510
Registriert seit: Feb 2011
Beitrag #1
PHP Funktion Umschreiben
Hi,

Kann mir jemand beim Abändern dieser Funktion hier kurz helfen?

Code:
function filecodereplace ($string1, $string2, $filename)
{
  $fp          = fopen($filename, "r");
  $size        = filesize($filename);
  $contents    = fread($fp, $size);
  fclose($fp);
  $file_replace = preg_replace("/$string1/", $string2, $contents);
  $fp          = fopen($filename, "w");
  fputs($fp, $file_replace);
  fclose($fp);
}

Diese Funktion ermöglicht es mir in einer Datei eine Codestelle zu suchen und zu ersetzen.
Wenn diese mehrfach vorkommt wird sie auch mehrfach ersetzt.

Ich habe nun hier unzählige Datein in denen überall das selbe ersetzt werden soll.
Das wäre ein großer Aufwand diese funktion derart oft aufzurufen.

Ich hätte die gern so abgeändert das die funktion automatisch in ALLEN Datein die in dem Ordner wo die Datei mit der Funktion drin ist + ALLE Datein in Unterverzeichnissen
sucht und ersetzt.
Einzige Bedingung nur PHP Datein sollen bearbeitet werden.

Kann mir da jemand helfen?

Mittels dieses Scripts soll eine Webseite (Skript) automatisch auf PHP 7.1 umgeschrieben werden btw.
Da das CMS mehrfach eingesetzt wird eine extrem Zeitsparende Variante.
(Dieser Beitrag wurde zuletzt bearbeitet: 06.04.2017 23:14 von Michael_.)
06.04.2017 23:12
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #2
RE: PHP Funktion Umschreiben
Muss es denn in PHP sein? Für die Aufgabe reicht doch auch ein Shell-Befehl auf dem betreffenden Linux-Server:
Code:
find . -iname "*.php" -exec sed -i "s/suchbegriff/zielbegriff/gi" {} \;

Wenn du auf dem Server nur PHP zur Verfügung hast dafür, warten wir mal die anderen Antworten ab. Bin gerade zu müde, um mir dahingehend was zu überlegen.
06.04.2017 23:27
Diese Nachricht in einer Antwort zitieren
s4ndwichMakeR Offline
Realitätsfeinmotoriker‮

Beiträge: 5.195
Registriert seit: Jul 2008
Beitrag #3
RE: PHP Funktion Umschreiben
Das war auch mein erster Gedanke, aber ich vermute mal, der Kollege hat keinen Shell-Zugang.

Und ja … bin auch zu müde gerade.

• • • – • – – • – –
(Dieser Beitrag wurde zuletzt bearbeitet: 06.04.2017 23:38 von s4ndwichMakeR.)
06.04.2017 23:37
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Michael_ Offline
Bier aus Hawaii

Beiträge: 1.510
Registriert seit: Feb 2011
Beitrag #4
RE: PHP Funktion Umschreiben
Muss mit PHP gemacht werden da nur Webspace.
Was noch gut wäre ist wenn ich in dem Script den Pfad zum Root ordner angeben könnte Datein aus selbigem und Datein aus Unterordnern selbigen sollen dann alle bearbeitet werden (alle PHP Datein, keine z.b. .js datein)

Ja muss auch nicht gleich sein würde morgen z.b. reichen :)
07.04.2017 00:10
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Michael_ Offline
Bier aus Hawaii

Beiträge: 1.510
Registriert seit: Feb 2011
Beitrag #5
RE: PHP Funktion Umschreiben
Code:
function multiplefilereplace ($string1, $string2)
{
foreach (glob("../../*.php") as $filename)
{
    $file = file_get_contents($filename);
    file_put_contents($filename, preg_replace("/$string1/", $string2, $file));
}
}

Das hier funktioniert schonmal in mehreren Datein Allerdings nur im angegebenen verzeichnis.
Wie kann ich es erreichen das auch datein in den unterverzeichnissen bearbeitet werden?
07.04.2017 02:45
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
winfreak Offline
アンゲシュテルタ

Beiträge: 10.495
Registriert seit: Aug 2008
Beitrag #6
RE: PHP Funktion Umschreiben
http://php.net/manual/de/class.recursive...erator.php

3sec Google.
Bitte niemals glob benutzen.

Das erste Beispiel ist, was du willst. $Regex dann im foreach nutzen und fertig.

[Bild: winfreak_32972_14.png]
07.04.2017 06:22
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Michael_ Offline
Bier aus Hawaii

Beiträge: 1.510
Registriert seit: Feb 2011
Beitrag #7
RE: PHP Funktion Umschreiben
Ich hab die Funktion aktuell so abgeändert aber das ist nicht so das wahre
Code:
function multiplefilereplace ($string1, $string2)
{
foreach (glob("../../*.php") as $filename)
{
    $file = file_get_contents($filename);
    file_put_contents($filename, preg_replace("/$string1/", $string2, $file));
}
foreach (glob("../../archive/*.php") as $filename)
{
    $file = file_get_contents($filename);
    file_put_contents($filename, preg_replace("/$string1/", $string2, $file));
}
foreach (glob("../../acp/*.php") as $filename)
{
    $file = file_get_contents($filename);
    file_put_contents($filename, preg_replace("/$string1/", $string2, $file));
}
foreach (glob("../../acp/lib/*.php") as $filename)
{
    $file = file_get_contents($filename);
    file_put_contents($filename, preg_replace("/$string1/", $string2, $file));
}
}

Den sollte mal ein weiteres Verzeichnis eine bearbeitung benötigen dann wird es nicht berücksichtigt.

Code:
function test ($string1, $string2)
{
$Directory = new RecursiveDirectoryIterator('../../');
$Iterator = new RecursiveIteratorIterator($Directory);
$Regex = new RegexIterator($Iterator, '/^.+\.php$/i', RecursiveRegexIterator::GET_MATCH);
foreach ($Regex as $filename)
{
    $file = file_get_contents($filename);
    file_put_contents($filename, preg_replace("/$string1/", $string2, $file));
}
}

Ich hab diverses wie auch das probiert aber ich kriegs nicht zum laufen
07.04.2017 18:23
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
winfreak Offline
アンゲシュテルタ

Beiträge: 10.495
Registriert seit: Aug 2008
Beitrag #8
RE: PHP Funktion Umschreiben
Nach einer Funktionsdefinition wird übrigens alles eingerückt. Man kann sich zwar dagegen entscheiden, ist aber einfach zu gängig.

"Ich hab diverses wie auch das probiert aber ich kriegs nicht zum laufen"

An was liegt es denn? Stimmt bei letzterem Beispiel denn die Pfadangabe? Sehen die Dateinamen richtig aus, wenn du mal $filename in der Schleife mit einem echo $filename, '<br>'; ausgeben lässt?

[Bild: winfreak_32972_14.png]
07.04.2017 18:34
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Michael_ Offline
Bier aus Hawaii

Beiträge: 1.510
Registriert seit: Feb 2011
Beitrag #9
RE: PHP Funktion Umschreiben
Bei Glob habe ich ../../*.php als Pfad angegeben und das verzeichnis stimmt.

Array
Warning: file_get_contents() expects parameter 1 to be a valid path, array given in /www/htdocs/w0125294/script/updater/system/functions.php on line 24

echo $filename;
gibt garnix aus.

Code:
function test ($string1, $string2)
{
$Directory = new RecursiveDirectoryIterator('../../');
$Iterator = new RecursiveIteratorIterator($Directory);
$Regex = new RegexIterator($Iterator, '/^.+\.php$/i', RecursiveRegexIterator::GET_MATCH);
foreach ($Regex as $filename)
{
echo $filename;
    $file = file_get_contents($filename);
    file_put_contents($filename, preg_replace("/$string1/", $string2, $file));
}
}
(Dieser Beitrag wurde zuletzt bearbeitet: 07.04.2017 18:56 von Michael_.)
07.04.2017 18:55
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Michael_ Offline
Bier aus Hawaii

Beiträge: 1.510
Registriert seit: Feb 2011
Beitrag #10
RE: PHP Funktion Umschreiben
Ich habs mal so probiert

Code:
function fullreplace ($string1, $string2)
{
foreach (glob("../../".'*') as $filename)
{
    $file = file_get_contents($filename);
    file_put_contents($filename, preg_replace("/$string1/", $string2, $file));
}
}

Fehlermeldungen

Code:
Warning: file_put_contents(../../acp): failed to open stream: Is a directory in /www/htdocs/w0125294/skript/update/system/functions.php on line 34

Warning: file_put_contents(../../archive): failed to open stream: Is a directory in /www/htdocs/w0125294/skript/update/system/functions.php on line 34

Warning: file_put_contents(../../attachments): failed to open stream: Is a directory in /www/htdocs/w0125294/skript/update/system/functions.php on line 34

Warning: file_put_contents(../../cache): failed to open stream: Is a directory in /www/htdocs/w0125294/skript/update/system/functions.php on line 34

Warning: file_put_contents(../../images): failed to open stream: Is a directory in /www/htdocs/w0125294/skript/update/system/functions.php on line 34

Warning: file_put_contents(../../js): failed to open stream: Is a directory in /www/htdocs/w0125294/skript/update/system/functions.php on line 34

Warning: file_put_contents(../../update): failed to open stream: Is a directory in /www/htdocs/w0125294/skript/update/system/functions.php on line 34

Die angegeben verzeichnisse würden ja schonmal stimmen und alle haben CHMOD 777 die Datein auch,
woran liegt das?

Außerdem wäre es schön wenn ich das verzeichnis "update" ausschließen könnte aus der Liste.
07.04.2017 20:33
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste