Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
PHP Funktion Umschreiben
DosAmp Offline
Anderes Zeigegerät

Beiträge: 12.219
Registriert seit: Jul 2008
Beitrag #11
RE: PHP Funktion Umschreiben
Wenn du schon unbedingt glob nutzen willst, dann gibt glob('../../*') logischerweise den gesamten Inhalt des überübergeordneten Verzeichnis aus, also auch alle Vetter-Verzeichnisse. Du willst das vermutlich auf PHP-Dateien (*.php) einschränken.

CCITTグループ4またはZIP圧縮のモノクロ300dpiで最高の再現性
(Dieser Beitrag wurde zuletzt bearbeitet: 07.04.2017 21:04 von DosAmp.)
07.04.2017 21:03
Webseite des Benutzers besuchen 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 #12
RE: PHP Funktion Umschreiben
Ja und wie mache ich das?
Das alle PHP Datein in den gelisteten Verzeichnissen angezeigt/bearbeitet werden?

Ich versuch das nun seit stunden schon -.-

../../*
Zeigt mir zwar ne Fehlermeldung an und alle Ordner aber
../../*.php bearbeitet nur die Datein in dem root verzeichnis ../../

Es muss auch nicht glob sein hauptsache eine funktion die das tut was ich will -.-
(Dieser Beitrag wurde zuletzt bearbeitet: 07.04.2017 21:11 von Michael_.)
07.04.2017 21:09
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #13
RE: PHP Funktion Umschreiben
Zwei Punkte:
1. Nutze statt glob die von winfreak vorgeschlagene Variante
2. Wenn dir jemand helfen soll, rück ordentlich ein, sodass Lesbarkeit gegeben ist
07.04.2017 21:15
Diese Nachricht in einer Antwort zitieren
Michael_ Offline
Bier aus Hawaii

Beiträge: 1.510
Registriert seit: Feb 2011
Beitrag #14
RE: PHP Funktion Umschreiben
Wenn mir jemand eine Funktion gibt die funktioniert mit der winfreak variante dann nehm ich die gerne.
Ich komm einfach nicht weiter jetzt helft doch bitte mal.

ENDLICH!

Code:
function get_files ($dir,&$endungen)
{
  $result = array();
  foreach(glob($dir.'/*') as $file)
  {
    $path_parts = pathinfo($file);
    if(   is_file($file) &&
          isset($path_parts['extension']) &&
          in_array($path_parts['extension'],$endungen)
       ) $result[] = $file;
    if(is_dir($file))
          $result = array_merge($result,get_files($file,$endungen));
  }
  return $result;
}

function fullreplace ($string1, $string2)
{
$dir = '../../';
$endungen = array('php','sql');
foreach(get_files($dir,$endungen) as $filename)
{
    $file = file_get_contents($filename);
    file_put_contents($filename, preg_replace("/$string1/", $string2, $file));
}
}

Das bearbeitet alle meine Datein!
Allerdings würde ich nun gerne noch das verzeichnis "update" ausschließen.

BITTE wie krieg ich das hin?
Sonst überschreibt der auch in den updater Datein die Codestellen was ich nicht möchte.

MASTER FUNKTION :D

Code:
function get_files ($dir,&$endungen)
{
  $result = array();
  foreach(glob($dir.'/*') as $file)
  {
    $path_parts = pathinfo($file);
    if(   is_file($file) &&
          isset($path_parts['extension']) &&
          in_array($path_parts['extension'],$endungen)
       ) $result[] = $file;
    if(is_dir($file))
          $result = array_merge($result,get_files($file,$endungen));
  }
  return $result;
}

function fullreplace ($string1, $string2)
{
$dir = '../..';
$endungen = array('php','sql');
foreach(get_files($dir,$endungen) as $filename)
{
if("../../mega_xxxx_updater" != substr($filename,0,23))
{
    $file = file_get_contents($filename);
    file_put_contents($filename, preg_replace("/$string1/", $string2, $file));
}        
}
}

Funktioniert einwandfrei. :)
Fast ein ganzer Tag arbeit. :D
(Dieser Beitrag wurde zuletzt bearbeitet: 07.04.2017 22:25 von Michael_.)
07.04.2017 21:18
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
winfreak Offline
アンゲシュテルタ

Beiträge: 10.499
Registriert seit: Aug 2008
Beitrag #15
RE: PHP Funktion Umschreiben
PHP-Code:
<?php

function replace_occurences_of_string_in_php_files_at_path($path$search_string$replace_string)
{
    
$directory = new Recursivedirectoryiterator($path);
    
$iterator = new Recursiveiteratoriterator($directory);
    
$php_files = new RegexIterator($iterator'/^.+\.php$/i'RecursiveRegexIterator::GET_MATCH);

    foreach (
$php_files as $file) {
        
$filename = (isset($file[0]) === true && is_string($file[0])) ? (string) $file[0] : null;

        if (
is_null($filename)) {
            echo 
'ERROR: File structure changed, could not extract filename!';
            return 
false;
        }

        if (
is_readable($filename) === false) {
            echo 
"ERROR: Could not read {$filename}!";
            return 
false;
        }

        if (
is_writable($filename) === false) {
            echo 
"ERROR: Could not write to {$filename}!";
            return 
false;
        }

        
$file_contents file_get_contents($filename);
        
$file_contents_replaced str_replace($search_string$replace_string$file_contents);

        
file_put_contents($filename$file_contents_replaced);
    }

    return 
true;


Das hier wäre eine, einigermaßen saubere, Lösung mit dem Iterator. Da ich nicht davon ausgehe, dass du mit Exceptions umgehen kannst, ganz klassisch mit return.

Ein bisschen mehr general purpose wird es so:

PHP-Code:
<?php

function recursive_replace($path$file_extension 'php'$search_string$replace_string)
{
    
$directory = new Recursivedirectoryiterator($path);
    
$iterator = new Recursiveiteratoriterator($directory);
    
$php_files = new RegexIterator($iterator"/^.+\.{$file_extension}$/i"RecursiveRegexIterator::GET_MATCH);

    foreach (
$php_files as $file) {
        
$filename = (isset($file[0]) === true && is_string($file[0])) ? (string) $file[0] : null;

        if (
is_null($filename)) {
            echo 
'ERROR: File structure changed, could not extract filename!';
            return 
false;
        }

        if (
is_readable($filename) === false) {
            echo 
"ERROR: Could not read {$filename}!";
            return 
false;
        }

        if (
is_writable($filename) === false) {
            echo 
"ERROR: Could not write to {$filename}!";
            return 
false;
        }

        
$file_contents file_get_contents($filename);
        
$file_contents_replaced str_replace($search_string$replace_string$file_contents);

        
file_put_contents($filename$file_contents_replaced);
    }

    return 
true;


[Bild: winfreak_32972_14.png]
(Dieser Beitrag wurde zuletzt bearbeitet: 07.04.2017 23:46 von winfreak.)
07.04.2017 23:25
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 #16
RE: PHP Funktion Umschreiben
Danke!
str_replace hat das irgendeinen nachteil gegenüber preg_replace weil mit preg_replace komm ich grad garnicht klar wenn ich versuche z.b. mysql_query( mit mysqli_query($db, zu ersetzen.
Mit str_replace nun funktioniert das bestens daher bin ich ganz froh das ich die funktion nun auch habe. :D
08.04.2017 00:48
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Der Doktor Offline
%0|%0

Beiträge: 7.872
Registriert seit: Dec 2008
Beitrag #17
RE: PHP Funktion Umschreiben
Nutz sichere Replace Funktionen

Es ist besser nicht zu moderieren als falsch zu moderieren
08.04.2017 08:45
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #18
RE: PHP Funktion Umschreiben
Der Vorteil von preg_replace ist, dass du reguläre Ausdrücke verwenden und somit auch Sachen suchen kannst, mit denen str_replace nix anfangen kann, str_replace kann nur Strings als ganzes ersetzen. preg_replace hingegen kann nach bestimmten Mustern im Text suchen und diese entsprechend anpassen. Ist also viel mächtiger.
08.04.2017 09:23
Diese Nachricht in einer Antwort zitieren
winfreak Offline
アンゲシュテルタ

Beiträge: 10.499
Registriert seit: Aug 2008
Beitrag #19
RE: PHP Funktion Umschreiben
(08.04.2017 08:45)Der Doktor schrieb:  Nutz sichere Replace Funktionen

Was ist an str_replace() unsicher, bitte? Und was wäre eine sichere Alternative ;)?

[Bild: winfreak_32972_14.png]
(Dieser Beitrag wurde zuletzt bearbeitet: 08.04.2017 19:54 von winfreak.)
08.04.2017 19:53
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 #20
RE: PHP Funktion Umschreiben
Ich habe nun ein Problem hier mit str_replace.

Wenn ich z.b.
Code:
mysql_query($variable

im quelltext stehen habe und mit
Code:
mysqli_query($variable

ersetzen will geht das ganz einfach mittels:
Code:
singlefilereplace_modern("mysql_query(\$variable", "mysqli_query(\$variable", "../../acp/lib/class_parse.php");

Wenn ich nun aber als einfaches beispiel
Code:
$this->replace[] = "\$this->formaturl('\\1')";

einfach nur entfernen möchte mittels
Code:
singlefilereplace_modern("\$this->replace[] = \"\$this->formaturl('\\1')\";", "", "../../acp/lib/class_parse.php");

dann passiert nichts, auch wenn ich
Code:
singlefilereplace_modern("\$this->replace[] = \"\$this->formaturl('\\1')\";", "JUNGE", "../../acp/lib/class_parse.php");

nehme passiert garnichts.
Woran genau liegt das? ich denke es hat mit den \ zu tun und somit Syntax aber ich weiß nicht wie ich das Problem beheben kann und was ich überhaupt falsch mache.

vllt. liegt es auch an meiner Funktion die ich hierfür benutze?
Code:
function singlefilereplace_modern ($string1, $string2, $string3)
{
foreach (glob("$string3") as $filename)
{
    $file = file_get_contents($filename);
file_put_contents($filename, str_replace($string1, $string2, $file));    
}
}

Brauche ich dafür preg_replace? Falls ja wie gehe ich damit richtig um?
Ergo wie passe ich den Code der gesucht und ersetzt werden soll so an das er passt?
08.04.2017 22:52
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