[Lugge] Re: php capriccioso

  • From: asettico <asettico@xxxxxxxxxxxxxxx>
  • To: LUGGe <lugge@xxxxxxxxx>
  • Date: Sat, 13 Dec 2003 11:53:40 +0100

Posto che non conosco PHP, provo a darti qualche risposta:

Roberto A.Foglietta wrote:

        $fp   = fopen($filename, "r");
        $cntn = fread($fp, filesize($filename));
        fclose($fp);
        $cntn = eregi_replace("href=['|\"]([0-9a-z-]+)['|\"]", 
"href='index.php?mod=$dir/\\1'", $cntn);
        echo "$cntn";

Se ho capito bene, ti carichi _tutto_ il file in /$cntn/.
Dato che sia /sed/ sia /gensub()/ di awk sostituiscono per default solo la _prima_ occorrenza dell'espressione di ricerca, penso che in PHP sia lo stesso: probabilmente devi poter specificare lo scope di /eregi_replace()/ (tanto per indenterci, tipo in "sed 's/expr1/expr2/g'").


Non soo daccordo con questa soluzione, perché caricare _tutto_ un file potrebbe essere dispendioso...

        $fp   = fopen($filename, "r");
        do {
                $line = fgets($fp, 1024);
                $line = eregi_replace("href=['|\"]([0-9a-z-]+)['|\"]", 
"href='index.php?mod=$dir/\\1'", $line);
                echo "$line";
        } while (!feof($fp));
        fclose($fp);

Pare che qui tu legga il file riga per riga. *Okkio* a _non_ usare il /do-while/, bensì il /while/: se il file fosse vuoto, la prima /fgets/ cosa restituisce? Quindi farei:


$fp = fopen($filename, "r");
while (! feof($fp))
{
$line = fgets($fp, 1024);
$line = eregi_replace("href=['|\"]([^'|\"]+)['|\"]", "href='index.php?mod=$dir/\\1'", $line);
echo "$line";
}
fclose($fp);


Anche in questo caso la /replace()/ potrebbe lavorare solo sulla _prima_ occorrenza, ma di _ciascuna_ riga. Ho modificato leggermente l'espressione, in modo da renderla un po' più generica.

Di più non posso aggiungere: fai sapere eventuali progressi.
--
asettico (aka Roberto) [http://www.rossomaltese.it/]
GPG fingerprint [ BA20 8C8D 7712 9D9A 57F3  A96A A7BE 905C 1CB9 26BA ]

-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS/IT/O d++(-) s:+>: a34 C++$ ULAVH*++$>++++ P+ L+>++++ E--- W++(-) N(++)
o? K-? w(---) !O M@ V@ PS+@ PE- Y? PGP->++ t+++ 5? X++ R tv+ b+ DI(+)
D++(---) G(-)>-- e>++++ h---() r++ y+++*
------END GEEK CODE BLOCK------

========----------

Prima di scrivere in m-list per favore leggi il regolamento
http://www.lugge.net/soci/index.php?link=manifesto

Archivio delle e-mail postate in lista
http://www.freelists.org/archives/lugge/

Modifica dell'account sulla lista LUGGe
http://www.lugge.net/soci/index.php?link=manifesto.htm#list


Other related posts: