Regex mal wieder (Parameter in Funktionsaufruf in Anführungszeichen setzen)
bearbeitet von JörgHallo Forum,
Anlass für mein heutoges Post ist die Weiterentwicklung von php, bzw. meine hieraus resultierenden Problemchen.
Wir wissen also, dass ab php8 Indizes in arrays, die ohne anführungszeichen mitgegeben werden, konsequenterweise als Konstante behandelt werden und nicht mehr als String, so denn keine Konstante vorhanden.
Ebenfalls wird es irgendwann (ich weiß nicht, ab wann, in php8 vermutlich noch nicht, aber irgendwann mal ganz sicher!) mal als `fatal error` ausgeworfen, wenn Parameter in Funktionsaufrufen nicht als String (in Anführungszeichen) übvergeben werden.
Also my_function('param1',param2); ergibt heute noch ein warning, irgendwann aber mal einen fatal error.
Und hier habe ich in unzähligen Scripten unzählige Male "gesündigt", daher mein Post.
Ich würde gerne ein Script drüber laufen lassen, was mir das ausmerzt. Wäre es immer derselbe Fehler, hatte ich an sowas hier gedacht:
~~~ php
function dir_rekursiv($verzeichnis)
{
$handle = opendir($verzeichnis);
while($datei = readdir($handle)) {
if($datei != "." && $datei != "..") {
if(is_dir($verzeichnis.$datei)) // Wenn Verzeichniseintrag ein Verzeichnis ist
{
// Erneuter Funktionsaufruf, um das aktuelle Verzeichnis auszulesen
dir_rekursiv($verzeichnis.$datei.'/');
} else {
if(strstr($verzeichnis.$datei,".php")) {
$name = explode(".",$verzeichnis.$datei);
if($datei != "replace.php") { // diese Datei
$dateiinhalt = file_get_contents("".$verzeichnis.$datei."");
// replace
$dateiinhalt = file_get_contents("".$verzeichnis.$datei."");
file_put_contents("".$verzeichnis.$datei."",str_replace('test','test123',$dateiinhalt));
}
}
}
}
}
closedir($handle);
}
dir_rekursiv('mypath');
echo("fertig");
~~~
Einfach Austausch von 'test' in 'test123' in jeder Zeile, die gefunden wird, bezogen auf ein komplettes Verzeichnis. Habe es jetzt nicht laufen lassen, aber das sollte so funktionieren, wenn ich keine flüchtigen Fehler eingebaut habe.
Ich suche aber ja keine feststehenden Begriffe, sondern etwas anders.
Meine Funktionsaufrufe sind immer nach folgendem Prinzip:
~~~ php
my_funktion($myVariable,myString)
~~~
Und natürlich ist myString ab und zu mal korrekterweise in Anführungszeichen (mal einfache, mal doppelte) gesetzt und meistens nicht.
Wie bringe ich also meinem Script bei, dieses myString immer in Anführungszeichen zu setzen, falls das noch nicht der Fall ist?
Jörg
Regex mal wieder
bearbeitet von JörgHallo Forum,
Anlass für mein heutoges Post ist die Weiterentwicklung von php, bzw. meine hieraus resultierenden Problemchen.
Wir wissen also, dass ab php8 Indizes in arrays, die ohne anführungszeichen mitgegeben werden, konsequenterweise als Konstante behandelt werden und nicht mehr als String, so denn keine Konstante vorhanden.
Ebenfalls wird es irgendwann (ich weiß nicht, ab wann, in php8 vermutlich noch nicht, aber irgendwann mal ganz sicher!) mal als `fatal error` ausgeworfen, wenn Parameter in Funktionsaufrufen nicht als String (in Anführungszeichen) übvergeben werden.
Also my_function('param1',param2); ergibt heute noch ein warning, irgendwann aber mal einen fatal error.
Und hier habe ich in unzähligen Scripten unzählige Male "gesündigt", daher mein Post.
Ich würde gerne ein Script drüber laufen lassen, was mir das ausmerzt. Wäre es immer derselbe Fehler, hatte ich an sowas hier gedacht:
~~~ php
function dir_rekursiv($verzeichnis)
{
$handle = opendir($verzeichnis);
while($datei = readdir($handle)) {
if($datei != "." && $datei != "..") {
if(is_dir($verzeichnis.$datei)) // Wenn Verzeichniseintrag ein Verzeichnis ist
{
// Erneuter Funktionsaufruf, um das aktuelle Verzeichnis auszulesen
dir_rekursiv($verzeichnis.$datei.'/');
} else {
if(strstr($verzeichnis.$datei,".php")) {
$name = explode(".",$verzeichnis.$datei);
if($datei != "replace.php") { // diese Datei
$dateiinhalt = file_get_contents("".$verzeichnis.$datei."");
// replace
$dateiinhalt = file_get_contents("".$verzeichnis.$datei."");
file_put_contents("".$verzeichnis.$datei."",str_replace('test','test123',$dateiinhalt));
}
}
}
}
}
closedir($handle);
}
dir_rekursiv('mypath');
echo("fertig");
~~~
Einfach Austausch von 'test' in 'test123' in jeder Zeile, die gefunden wird, bezogen auf ein komplettes Verzeichnis. Habe es jetzt nicht laufen lassen, aber das sollte so funktionieren, wenn ich keine flüchtigen Fehler eingebaut habe.
Ich suche aber ja keine feststehenden Begriffe, sondern etwas anders.
Meine Funktionsaufrufe sind immer nach folgendem Prinzip:
~~~ php
my_funktion($myVariable,myString)
~~~
Und natürlich ist myString ab und zu mal korrekterweise in Anführungszeichen (mal einfache, mal doppelte) gesetzt und meistens nicht.
Wie bringe ich also meinem Script bei, dieses myString immer in Anführungszeichen zu setzen, falls das noch nicht der Fall ist?
Jörg