Un utente ha chiesto informazioni su Developing with WordPress di Wordpress

fetch_feed () non restituisce alcun dato rss

Un utente ha chiesto 👇

Di recente sono passato a un nuovo server con PHP 7.0. Tutto sembra funzionare ma ho un problema con la funzione fetch_feed (). Non restituisce alcun dato. Sto usando il codice seguente per testare e testare molti feed. Stesso risultato ogni volta.

Ho anche provato a utilizzare curl dalla riga di comando del server e funziona senza problemi. Quindi wordpress sembra essere un problema.

Ho provato WP_DEBUG e abilitato error_reporting. Ma non ottengo errori.

Quale potrebbe essere il problema?


add_action('init', 'testfetchfeed');

function testfetchfeed () {
	if (isset($_REQUEST['testfetchfeed'])) {
		
		$rss = fetch_feed('http://en.blog.wordpress.com/feed/');
		
		if (is_wp_error($rss)) {
			echo $rss->get_error_message();
		} else {
			print_r($rss);
		}
		exit;
	}
}
SimplePie Object
(
    [data] => Array
        (
        )

    [error] => 
    [sanitize] => WP_SimplePie_Sanitize_KSES Object
        (
            [base] => 
            [remove_div] => 1
            [image_handler] => 
            [strip_htmltags] => Array
                (
                    [0] => base
                    [1] => blink
                    [2] => body
                    [3] => doctype
                    [4] => embed
                    [5] => font
                    [6] => form
                    [7] => frame
                    [8] => frameset
                    [9] => html
                    [10] => iframe
                    [11] => input
                    [12] => marquee
                    [13] => meta
                    [14] => noscript
                    [15] => object
                    [16] => param
                    [17] => script
                    [18] => style
                )

            [encode_instead_of_strip] => 
            [strip_attributes] => Array
                (
                    [0] => bgsound
                    [1] => class
                    [2] => expr
                    [3] => id
                    [4] => style
                    [5] => onclick
                    [6] => onerror
                    [7] => onfinish
                    [8] => onmouseover
                    [9] => onmouseout
                    [10] => onfocus
                    [11] => onblur
                    [12] => lowsrc
                    [13] => dynsrc
                )

            [strip_comments] => 
            [output_encoding] => UTF-8
            [enable_cache] => 1
            [cache_location] => ./cache
            [cache_name_function] => md5
            [timeout] => 10
            [useragent] => 
            [force_fsockopen] => 
            [replace_url_attributes] => Array
                (
                    [a] => href
                    [area] => href
                    [blockquote] => cite
                    [del] => cite
                    [form] => action
                    [img] => Array
                        (
                            [0] => longdesc
                            [1] => src
                        )

                    [input] => src
                    [ins] => cite
                    [q] => cite
                )

        )

    [useragent] => SimplePie/1.3.1 (Feed Parser; http://simplepie.org; Allow like Gecko) Build/20141218193430
    [feed_url] => http://en.blog.wordpress.com/feed/
    [file] => 
    [raw_data] => 
    [timeout] => 10
    [force_fsockopen] => 
    [force_feed] => 
    [cache] => 1
    [cache_duration] => 86400
    [autodiscovery_cache_duration] => 604800
    [cache_location] => ./cache
    [cache_name_function] => md5
    [order_by_date] => 1
    [input_encoding] => 
    [autodiscovery] => 31
    [registry] => SimplePie_Registry Object
        (
            [default:protected] => Array
                (
                    [Cache] => SimplePie_Cache
                    [Locator] => SimplePie_Locator
                    [Parser] => SimplePie_Parser
                    [File] => SimplePie_File
                    [Sanitize] => SimplePie_Sanitize
                    [Item] => SimplePie_Item
                    [Author] => SimplePie_Author
                    [Category] => SimplePie_Category
                    [Enclosure] => SimplePie_Enclosure
                    [Caption] => SimplePie_Caption
                    [Copyright] => SimplePie_Copyright
                    [Credit] => SimplePie_Credit
                    [Rating] => SimplePie_Rating
                    [Restriction] => SimplePie_Restriction
                    [Content_Type_Sniffer] => SimplePie_Content_Type_Sniffer
                    [Source] => SimplePie_Source
                    [Misc] => SimplePie_Misc
                    [XML_Declaration_Parser] => SimplePie_XML_Declaration_Parser
                    [Parse_Date] => SimplePie_Parse_Date
                )

            [classes:protected] => Array
                (
                    [Sanitize] => WP_SimplePie_Sanitize_KSES
                    [Cache] => WP_Feed_Cache
                    [File] => WP_SimplePie_File
                )

            [legacy:protected] => Array
                (
                    [0] => WP_SimplePie_Sanitize_KSES
                    [1] => WP_Feed_Cache
                    [2] => WP_SimplePie_File
                )

        )

    [max_checked_feeds] => 10
    [all_discovered_feeds] => Array
        (
        )

    [image_handler] => 
    [multifeed_url] => Array
        (
        )

    [multifeed_objects] => Array
        (
        )

    [config_settings] => 
    [item_limit] => 0
    [strip_attributes] => Array
        (
            [0] => bgsound
            [1] => class
            [2] => expr
            [3] => id
            [4] => style
            [5] => onclick
            [6] => onerror
            [7] => onfinish
            [8] => onmouseover
            [9] => onmouseout
            [10] => onfocus
            [11] => onblur
            [12] => lowsrc
            [13] => dynsrc
        )

    [strip_htmltags] => Array
        (
            [0] => base
            [1] => blink
            [2] => body
            [3] => doctype
            [4] => embed
            [5] => font
            [6] => form
            [7] => frame
            [8] => frameset
            [9] => html
            [10] => iframe
            [11] => input
            [12] => marquee
            [13] => meta
            [14] => noscript
            [15] => object
            [16] => param
            [17] => script
            [18] => style
        )

)

Questo argomento è stato modificato 3 anni, 1 mese fa da. Questo argomento è stato modificato 3 anni, 1 mese fa da.

(@bcworkz)

3 anni, 1 mese fa

Ho usato il tuo codice sul mio sito e mi alimenta senza problemi (PHP 7). Quindi il problema è qualcosa con uno dei tuoi plugin o tema che non sembra funzionare bene con PHP 7. Installa e attiva il plugin per il controllo dello stato. Copia temporaneamente il tuo codice nel file functions.php del tema venti. Se non esiste nella tua installazione, installalo, poiché richiede un controllo dello stato. Dalla sezione del pannello del menu di amministrazione, apri il controllo dello stato e vai alla scheda di risoluzione dei problemi. Attiva il metodo di risoluzione dei problemi. Dovresti ottenere i dati del feed di output del codice di test.

Avvia il tuo tema e ripristina i plugin dalla sezione della barra di amministrazione per la risoluzione dei problemi. Ripristina uno alla volta, testando dopo ciascuno. Quando il test fallisce di nuovo, l’ultimo modulo di attivazione con PHP 7 ha un problema.

Lanciatore di thread

(@niska)

3 anni, 1 mese fa

Grazie per la risposta. Ho un plug-in per il controllo dello stato installato e attivato. Non ho avuto problemi con la mia installazione, tranne che consiglio di aggiornare a PHP 7.2 (sto usando PHP 7.0.27). Vedere le informazioni di seguito.

Ho utilizzato il metodo di risoluzione dei problemi del controllo dello stato per disabilitare tutti i plugin e i temi, ad eccezione del codice sopra. Tuttavia, il mio codice di prova non fornisce ancora i dati del feed.

Non so cosa fare adesso. Sono abbastanza sicuro che non sia il mio server ad avere problemi, poiché un curl dalla riga di comando sta funzionando. Inoltre, il download e l’installazione di plugin all’interno di wp-admin funziona. Quindi si stanno ottenendo dati esterni. Per qualche motivo i dati esterni non possono essere recuperati utilizzando la funzione fetch_feed ().

Qualche idea su come procedere?


### WordPress ###

Version: 4.9.4
Language: sv_SE
Permalink structure: /%postname%/
Is this site using HTTPS?: Yes
Can anyone register on this site?: No
Default comment status: closed
Is this a multisite?: No
User Count: 474
Communication with WordPress.org: WordPress.org is reachable
Create loopback requests: The loopback request to your site completed successfully.

### Drop-ins ###

advanced-cache.php: Advanced caching plugin.

### Active theme ###

Name: 
Version: 1.0.0
Author: Anonymous
Author website: Undefined
Parent theme: Twenty Sixteen
Supported theme features: automatic-feed-links, title-tag, custom-logo, post-thumbnails, menus, html5, post-formats, editor-style, customize-selective-refresh-widgets, custom-background, custom-header, widgets

### Other themes (1) ###

Twenty Sixteen (twentysixteen): Version 1.4 by the WordPress team

### Must Use Plugins (1) ###

Health Check Disable Plugins: Version 1.1

### Media handling ###

Active editor: WP_Image_Editor_GD
Imagick Module Version: Imagick not available
ImageMagick Version: Imagick not available
GD Version: bundled (2.1.0 compatible)
Ghostscript Version: Unable to determine if Ghostscript is installed

### Server ###

Server architecture: Linux 3.16.0-4-amd64 x86_64
PHP Version: 7.0.27-1~dotdeb+8.1 (Supports 64bit values)
PHP SAPI: fpm-fcgi
PHP max input variables: 1000
PHP time limit: 300
PHP memory limit: 256M
Max input time: 60
Upload max filesize: 2M
PHP post max size: 8M
cURL Version: 7.38.0 OpenSSL/1.0.1t
SUHOSIN installed: No
Is the Imagick library available: No

### Database ###

Extension: mysqli
Server version: 5.5.5-10.1.31-MariaDB-1~jessie
Client version: mysqlnd 5.0.12-dev - 20150407 - $Id: b6c5906d452ec590732a93b051f3827e02749b83 $
Database prefix: wp_

### WordPress constants ###

ABSPATH: /www/wp/public_html/
WP_HOME: Undefined
WP_SITEURL: Undefined
WP_DEBUG: Disabled
WP_MAX_MEMORY_LIMIT: 256M
WP_DEBUG_DISPLAY: Enabled
WP_DEBUG_LOG: Disabled
SCRIPT_DEBUG: Disabled
WP_CACHE: Enabled
CONCATENATE_SCRIPTS: Undefined
COMPRESS_SCRIPTS: Undefined
COMPRESS_CSS: Undefined
WP_LOCAL_DEV: Undefined

### Filesystem permissions ###

The main WordPress directory: Writable
The wp-content directory: Writable
The uploads directory: Writable
The plugins directory: Writable
The themes directory: Writable
The Must Use Plugins directory: Writable

Lanciatore di thread

(@niska)

3 anni, 1 mese fa

dice phpinfo

allow_url_fopen = Disattivato
supporto cURL = abilitato

Non sono sicuro se sia importante o no.

Lanciatore di thread

(@niska)

3 anni, 1 mese fa

Questo codice funziona:

$c = curl_init();
curl_setopt($c, CURLOPT_URL, 'https://en.blog.wordpress.com/feed/');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($c);

Penso che fetch_feed () stia usando curch, quindi perché fetch_feed () non funziona per me?

Si prega di avvisare.

Lanciatore di thread

(@niska)

3 anni, 1 mese fa

L’ho risolto. modulo parser php-xml mancante.

(@bcworkz)

3 anni, 1 mese fa

fetch_feed () usa SimplePie_File, che cerca di usare cURL se disponibile. Torna a file_get_contents () se cURL fallisce.

Presumo che l’oggetto SimplePie nel tuo OP sia l’output del tuo codice? È piuttosto strano trovare una funzione di dati vuota. Come puoi immaginare, di solito c’è una struttura dei dati del feed RSS. Se si verificano errori, l’oggetto WP_Error viene ripristinato, con il risultato che WP emette un semplice messaggio di errore come “Impossibile decodificare il flusso” gzip “HTTP” o altro. WP su SimplePie non visualizza la restituzione di un oggetto vuoto come errore. SimplePie è molto bravo a catturare le condizioni di errore e a riportarle indietro, quindi è insolito trovare un oggetto vuoto senza generare un errore.

Vuoi davvero ottenere il feed da blog.wordpress.com o è un sostituto di un sito che non hai preferito divulgare? Potresti pensare che il sito restituisca un feed vuoto e SimplePie restituisca correttamente ciò che ha ottenuto dal sito. Quindi il problema è quel sito e non il tuo server. Ma ovviamente il feed del blog di WP funziona e il problema è altrove se questo è il feed che stai cercando di ottenere.

Ma poi si segnala che viene alimentata un’applicazione cURL diretta. Presumo che tu stia utilizzando l’URL del feed di cui hai veramente bisogno, quindi restituisce sospetti a fetch_feed (). fetch_feed () fondamentalmente instilla semplicemente un SimplePie e gli dice di nutrirsi. Allora non c’è molto da fare di sbagliato. SimplePie fa tutto il lavoro pesante, così com’è.

Dal momento che non posso replicare il problema che hai, è difficile suggerire una soluzione, a parte quello che farei se potessi replicare il problema. Tracciavo il codice pertinente, restituendo o emettendo i dati di debug nei punti chiave per verificare che funzionino correttamente fino ad ora. Alla fine mi sono imbattuto nel punto in cui le cose vanno male e di solito è chiaro a quel punto perché è andato storto e cosa è necessario per prevenirlo.

Il monitoraggio può essere molto noioso attraverso il codice sorgente, sperando di scoprire dove si verifica l’errore. “Separare e contrarre” è spesso più efficace. Trova un punto in una fonte circa a metà del processo, quindi controlla lo stato. Questo ti dice se il problema è prima o dopo quel punto. Seleziona un altro punto circa a metà della metà del problema e ricontrolla. Continua a dividere in questo modo finché non avrai approfondito il punto esatto in cui si verifica il problema. Questo è molto efficace se capisci il codice a vista. Se non è chiaro, un passaggio della procedura ti aiuterà a capire meglio cosa sta facendo il codice, il più ordinato possibile.

fonte fetch_feed ()
Fonte SimplePie
Fonte SimplePie_File

Lanciatore di thread

(@niska)

3 anni, 1 mese fa

Grazie per la tua risposta. Ho contrassegnato questo thread come una soluzione poiché la soluzione era installare il modulo parser php-xml.

sudo apt-get install php-xml

SimplePie non causa un errore in questo caso, motivo per cui è stato difficile trovare la soluzione.

(@bcworkz)

3 anni, 1 mese fa

Ah! Sì, il supporto XML è molto importante per la gestione dei feed. Ottimo lavoro per rintracciarlo. Sono contento che tu sia riuscito a risolverlo.

Was this helpful?

0 / 0

Lascia un commento 0

Your email address will not be published. Required fields are marked *