Newsgroup: it.comp.www.php
Titolo: http fetch restituisce Server error

Brevemente (spero) la mia situazione.
Assoluto principiante di php. Dominio su TopHost. Wiki con MediaWiki 
(WP). Blog con Wordpress (WP). Plugin di WP Wiki Append per inserire in 
un post WP un articolo di MW.
Il plugin funziona perfettamente quando inserisco per esempio una pagina 
di wikipedia. Quando invece inserisco una pagina del mio wiki mi 
restituisce l'errore "Server error" (500, almeno cosï¿œ mi pare di capire).
Ora, spulciando tra il codice del plugin e facendo varie prove vedo il 
blocco dove sta la riga che genera l'errore ï¿œ il seguente:
$h = new http();
// this is the only magic part
if (!$h->fetch($page."?action=render"))
$body = "<div id='wiki-inc-content'><p >Sorry but <a href='".$page."' 
 >".$page."</a> could not be appended to your page</p></div>";
 
if($h->body)
$body = "<div id='wiki-append-content'>".$h->body."</div>";
// we might have to stip the content if you want to see just the excerpt
$content .= $body;
(giï¿œ) Premesso che non so un cazzo, puï¿œ essere che fetch sia 
disabilitato per ragioni di sicurezza?
Altrimenti, posso sostituire quella riga incriminata con qualche altra 
istruzione? In fin dei conti il nocciolo del plugin ï¿œ tutto qui: legge 
il codice html di una pagina nuda e cruda $page."?action=render" e lo 
aggiunge a $content.
In sostanza, quale istruzione (o righe di codice) posso usare per 
leggere il codice html di una pagina e restituirlo semplicemente come 
stringa?
Grazie a tutti per la misericordia. :)

 può essere che fetch sia disabilitato per ragioni di sicurezza?
Può essere, TH non ti permette di analizzare i log, come sai che 
l'errore è su quella riga?
Nel pannello di controllo del tuo dominio c'è una impostazione per 
abilitare fopen() vedi se quella ti aiuta.

 abilitare fopen() vedi se quella ti aiuta.
Penso che tu abbia centrato il problema. Ho visto che in teoria posso 
abilitare fopen e curl, e da quanto ho capito uno dei due dovrebbe 
risolvere. Dico in teoria perché purtroppo al momento qualunque modifica 
faccia nel pannello di controllo non viene salvata. Ho aperto un ticket 
e attendo una risposta.
Grazie intanto per l'utilissimo (e spero alla fine risolutivo, anche se 
ora non è così ma non certo per colpa tua) consiglio.

 abilitare fopen() vedi se quella ti aiuta.
Niente da fare. Ho abilitato tutti i parametri ma ottengo sempre lo 
stesso errore.
Ho visto che il codice richiama prima @fsockopen e poi fgets, ma più di 
questo proprio non sono in grado di fare. :(

 questo proprio non sono in grado di fare. :(
ecco, magari togliere quella @ davanti a fsockopen puo' essere d'aiuto.
 

 ecco, magari togliere quella @ davanti a fsockopen puo' essere d'aiuto.
Non funziona comunque. Piuttosto, dato che sto ancora ravanando nel 
codice, può essere che funzioni con
                "GET $page HTTP/1.0\r\n"
ma non con
                "POST $page HTTP/1.1\r\n"
? Si può formare HTML/1.0?

 ? Si può formare HTML/1.0?
Ma di che stai parlando? Ti rendo conto di quanto sia misteriosa tutta 
la discussione?
Passando allo specifico: tu leggi "GET" in una stringa, lo vuoi cambiare 
con "POST" e chiedi se puoi farlo? Io non verrò certo a impedirtelo.
Se non ricordo male un errore 500 può anche essere legato al controllo 
dei permessi degli script da parte di TopHost, uno script con permessi 
777 fa scattare l'errore.

prova ad aggiungere
error_reporting(E_ALL);
all'inizio dello script, così dovrebbe stamparti a video tutti gli
errori e i warning.

 777 fa scattare l'errore.
Penso proprio che non dipenda da questo. Perché ho sostituito le righe 
di codice indicate nel mio messaggio iniziale con
$body=load('www.miosito.ext/miowiki/miapagina')
dove la funzione load l'ho copiata pari pari da questa pagina che ho 
trovato con una ricerca del tipo "fecth page php" o qualcosa del genere:
http://www.bin-co.com/php/scripts/load/
e ora lo script funziona. Per me è comunque un fallimento, perché, al di 
là dell'inefficienza della soluzione (caricamento lento, codice da 
aggiustare un po', impossibilità di aggiornare il plugin eccetera 
eccetera) non ho capito quale era il problema del plugin originale, cosa 
che mi pesa tanto.
Comunque sia, funziona, e io sono solo un dilettante con un misero blog 
e un misero wiki che dopo due giorni di sbattimento con un oggetto 
assolutamente oscuro come il php non può far altro che accontentarsi...

<?php
error_reporting(E_ALL);

 errori e i warning.
Non c'č nessun errore di codice: c'č una chiamata al server che invece 
di restituire la stringa contenente il codice html della pagina 
richiesta, restituisce la stringa "server error".

 richiesta, restituisce la stringa "server error".
E non potrebbe essere giusto cosi'?
Nel senso: hai provato ad aprire quella pagina (*esattamente* quella) 
con un browser e vedere cosa ti ritorna?
ciao
Mauro

 con un browser e vedere cosa ti ritorna?
Certo che ho provato. Dovrebbe essere chiaro dal seguito della discussione.
Mi sembra che le cose stiano così: php ha diversi metodi per recuperare 
il contenuto di una pagina web: fsckopen, curl, e forse anche altri. 
Alcuni di essi funzionano con TH, altri no. Tanto è vero che sostituendo 
una routine del plugin con un'altra che ho trovato in rete le cose 
funzionano perfettamente.
Purtroppo la mia nulla competenza in PHP mi impedisce di capire dove sta 
esattamente il problema.

 Alcuni di essi funzionano con TH, altri no. T
Sembra confermato:
<
http://g-weblog.blogspot.com/2007/07/il-passaggio-wordpress-e-sempre-piu
.html>
tu stai cercando di usare SSL?

 tu stai cercando di usare SSL?
Boh! Tu stai parlando con uno che non capisce nemmeno perché in php non 
esiste una funzione nativa del tipo retrievehml('
http://www.google.com
') 
e invece per tale scopo occorre costruirsi una funzione di 200 righe di 
codice (o usarne una altrui).
Comunque, da quello che ho capito, il plugin richiama la pagina col 
protocollo con cui viene specificata. Siccome io indico nel campo 
apposito 
http://www.miosito.ext/miapagina
 e non 
https://www.miosito.ext/miapagina
, non penso ci sia di mezzo SSL (se è 
questo che intendevi chiedere).
Poi, beninteso, non ce l'ho con TopHost. Tutto sommato mi trovo bene.
Sono io che aspiro a usare WordPress in maniera avanzata ma sono una 
nullità in fatto di php.
A proposito, c'è un altro plugin che non mi funziona, questo:
http://wordpress.org/extend/plugins/wordpress-backup/
che a quanto presumo dovrebbe avere più utenti interessati di WikiAppend.
Magari qualcuno l'ha provato e come me non è riuscito a usarlo?

 codice (o usarne una altrui).
Ne esiste piu` di una, a dire il vero, visto che in PHP tutte le funzioni 
che operano sui file possono operare anche sugli stream.
Per esempio puoi usare file_get_contents('
http://www.google.com
')
Il problema e` che spesso queste funzioni vengono disabilitate per motivi 
di sicurezza (pochi) o di traffico (piu` spesso).
Per quanto riguarda il tuo problema, bisognerebbe fare un tracing di 
tutti i passi e analizzare gli errori.
Puo` darsi che gli manchino alcuni header inviati (tipo Host: per 
selezionare il virtualhost), ma e` difficile dirlo senza poter 
sperimentare di persona.
Bye.