Preg_replace

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 630
Iscritto il: mer ott 13, 2010 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Preg_replace

Messaggioda darkstaring » ven set 02, 2016 18:46

Sera a tutti... :D
Devo fare uno scipt in php che funzioni in qualsiasi directory della www/
inizialmente ho fatto questa funzione:

Codice: Seleziona tutto

define("ABSOUTE", $_SERVER['DOCUMENT_ROOT']."/mia_directory/");
$pwd=str_replace(ABSOUTE, "", $_SERVER['SCRIPT_FILENAME']);
$pwd=explode("/", $pwd);
$url='';
for($i=1;$i<count($pwd);$i++)
{
    $url.='../';
}

if(! include($url.'conn/conn.php')) { print "Errore. Carico: ".$url."conn/conn.php";}

Così.. ovunque sposti lo script, il file conn/conn.php viene incluso , (se rimane dentro /mia_directory/)...
Ma come vedete faccio un ciclo.. vorrei velocizzare il tutto con delle espressioni regolari, cosa che ahimè non conosco bene.... :evil:
Mi spiego
allora voglio sostituire qualsiasi cosa tra $_SERVER['DOCUMENT_ROOT']. e dirname(__FILE__) ,
tra gli slash "/" con "/../"...
Esempio:
/www/pippo/pluto/paperino
io ho un file da includere in /www/prova.php
se sposto il file dentro la dir pippo o pluto o paperino deve includere sempre lo stesso file senza variare lo script...
ma i ../ si devono generare possibilmente senza cicli ma con un :
replace di pippo con ..
replace di pluto con ..
replace di paperino con ..

Spero di essermi spiegato bene

Grazie

Avatar utente
conraid
Staff
Staff
Messaggi: 13078
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Re: Preg_replace

Messaggioda conraid » sab set 03, 2016 11:07

Ho capito poco, ma se il file da includere è sempre nello stesso posto usa i path assoluti no?

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 630
Iscritto il: mer ott 13, 2010 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: Preg_replace

Messaggioda darkstaring » sab set 03, 2016 11:10

Non posso usare path assoluti... I path si devono generare... In pratica vorrei sostituire tutti i caratteri tra slash , con ..

Avatar utente
conraid
Staff
Staff
Messaggi: 13078
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Re: Preg_replace

Messaggioda conraid » sab set 03, 2016 11:16

Ma se il file da includere è sempre in /www/prova.php non capisco il problema.

Al limite fai un esempio più reale per capire.

Avatar utente
conraid
Staff
Staff
Messaggi: 13078
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Re: Preg_replace

Messaggioda conraid » sab set 03, 2016 11:31

Comunque

$pippo = "/maio/pluto/gino/prova.php";
$prova = preg_replace("/[A-Za-z]*\//", "../", $pippo);
echo $prova;

risultato ../../../../prova.php

dovrebbe funzionare, adattalo al tuo caso

Se non vuoi il primo fai un altra regex per ^../

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 630
Iscritto il: mer ott 13, 2010 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: Preg_replace

Messaggioda darkstaring » lun set 05, 2016 8:31

Grazie 1000.. Ma ancora non funziona...
In pratica uso $_SERVER['REQUEST_URI'] e vedo che mi aggiunge un ../ in più...
Comunque la lezione mi è servita... Grazie :thumbright: