Esiste il modo per inserire il codice html di una pagina web in una variabile?
Esiste il modo per inserire il codice html di una pagina web in una variabile?
Si puo' fare in diversi modi. Se il file html si trova in locale puoi usare fopen() e vai a colpo sicuro
Se invece vuoi aprire un url di una pagina web a disposizione su internet la funzione fopen potrebbe
restituire un errore (forse nel 10% dei casi). Comunque ecco il codice:
In linea di massima e' un sistema valido. Se ti interessa con il comando GET in linux puoi estrpolareCodice PHP:
$My_Path = "PATH"; # Percorso preferibilmente del file in locale
$Page_html_source = "";
$file_open_http = @fopen($My_Path, "r") or $Page_html_source .= 'errore';
if($Page_html_source != 'errore')
{
while($little = fread($file_open_http, 100))
{
$Page_html_source .= $little;
}
} else {
print("Errore!");
}
fclose($file_open_http);
solo determinate informazioni come per esempio tutti i link oppure solo il testo.
leggere solo 100 byte non conviene, praticamente tutti i sistemi operativi leggono 8kb per volta quindi leggere la stessa quantità letta dal sistema operativo è estremamente più efficente (chiamare fopen per leggere 100 byte per volta vuol dire devi chiamare l'fread 82 volte per leggere i dati che lui ha letto in un colpo)
detto questo, c'è la comoda funzione file_get_contents ( www.php.net/file_get_contents ) se non hai bisogno di funzionalità particolari (ad esempio il parsing mentre leggi, oppure se il file lo devi inviare direttamente al browser senza però tenerlo in memoria e via dicendo)
per finire, i problemi relativi ad errori nella lettura di pagina html restituite da webserver possono essere dovuti ad un flag presente nel php.ini che "disattiva" questo tipo di streams (http://, ftp:// e via dicendo) per fopen ... la direttiva è questa http://www.php.net/manual/en/filesys...llow-url-fopen e la si può verificare tramite un phpinfo() ... anche se c'è scritto fopen fa riferimento a tutte le funzioni che accedono ai dischi tramite stream ed in realtà può essere bypassata con facilità se si ci scrive un wrapper che gestisce la cosa
ad esempio se si ci scrive uno stream wrapper ( http://php.net/manual/en/book.stream.php ) che utilizza le curl, se presente, o ancora meglio fsockopen o le socket si bypassa in toto il problema: ovviamente se il provider blocca le richieste sulla porta 80 in uscita ... c'è poco da fare
VM su SSD da 5$! https://www.digitalocean.com/?refcode=f6925c7f0ddb
Innanzitutto ringrazio tutti anticipatamente per la disponibilità. Ora con calma proverò le vaie soluzioni.
In buona sostanza, visto che feedburner ultimamanete è impazzito e la newsletter non funziona più ho deciso di crearmene una mia tutta automatizzata.
Ho predisposto un "generatore" in php che, il tale giorno della settimana, effettua le sue belle queries e crea il contenuto della newsletter
http://www.miolegale.it/newsletter/admin/gen.php
Il codice html della pagina di cui sopra deve essere letto e finire memorizzato nella variabile che a sua volta verrà utilizzata per contentere il corpo del testo della newsletter stessa.
Poi, utilizzando i cronjobs del server programmerò l'invio automatico della newsletter che si "autogenera".
http://www.miolegale.it/info.php
purtroppo i miei tentativi sono stati vani a causa delle impostazioni del server.
Se volessi usare la funzione file_get_contents è sufficiente l'attivazione di allow_url_fopen ?
Dipende.
Se il web server è dietro ad un firewall/nat/proxy, potrebbe non essere sufficiente.
Chiedi al fornitore di hosting.
In alternativa puoi provare con le funzioni curl oppure con fsockopen (se disponibile).
Grazie a tutti per i consigli.
Ho provato in locale la funzione file_get_contents ed è uno spettacolo!
Ora vediamo se mi attivano la stessa sul server e dovrei essere apposto....
Funzione attivata anche in remoto per cui sono ormai prossimo all'obiettivo ...ma...
...problema è in htaccess ora.
Mi spiego:
Questo è il file di prova
http://www.miolegale.it/newsletter/admin/1.php
il contenuto di questo file è il seguente:
tuttavia il risultato è un redirect 301<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Documento senza titolo</title> </head> <body> <?php $gen = file_get_contents('http://miolegale.it/newsletter/admin/gen.php'); echo $gen; ?>
se cancello dalla directory principale htaccess (che uso per il mod rewrite) funziona invece perfettamente per cui http://www.miolegale.it/newsletter/admin/1.php rigenera a video il file indicato nella funzione file_get_contents ovvero http://miolegale.it/newsletter/admin/gen.php
Perchè devi lavorare con file_get_contents() ed un URL quando il file che devi ottenere è locale?
Perchè non usi include()?
Example #6 Using output buffering to include a PHP file into a string
http://www.php.net/manual/en/function.include.php
mi sono perso nell'esempio....