jambroseclarke
los wp-cli La herramienta es una forma muy útil de ejecutar tareas de WordPress desde la línea de comandos. Sin embargo, si el sitio de WordPress contiene complementos o un código de inicialización del tema que llama al PHP getallheaders
entonces wp-cli no funcionará. En su lugar, devolverá el siguiente error en respuesta a cada comando:
Error fatal: llamada a la función no definida getallheaders()
Esto está sucediendo en PHP v 5.4.4. ¿Cuál es la mejor solución para este problema?
jambroseclarke
Algunas funciones de PHP dependen de la interfaz de programación de aplicaciones de servidor subyacente. Apache SAPI, por supuesto, admite el método getallheaders. Pero algunas interfaces de línea de comandos no lo hacen. En este caso, wp-cli usa PHP-FPM (FastCGI Process Manager) como SAPI. Sin embargo según este Informe de error de PHP 62596, PHP-FPM en PHP v5.4 no admite getallheaders. Por lo tanto, cuando wp-cli intenta iniciar el sitio de WordPress en modo CLI, se producen errores de función indefinida.
La solución recomendada es agregar estas líneas al archivo wp-config.php. La herramienta wp-cli define una constante llamada: WP_CLI. Si se establece esta constante, simplemente defina una versión ficticia de getallheaders. Esto no debería causar ningún problema porque la aplicación WP no obtiene encabezados HTTP de todos modos cuando se ejecuta en modo CLI. Aquí hay un código de muestra que se puede insertar en wp-config.php
if ( defined( 'WP_CLI' ) ) {
if ( !function_exists ( 'getallheaders' ) ) {
function getallheaders() {return array();}
}
}
-
Las ocurrencias individuales también se pueden manejar en línea donde se llama a la función getallheaders envolviendo con ,
if(function_exists('getallheaders'))
– aquí
20 de noviembre de 2015 a las 18:51
En caso de que esté sincronizando desde un sitio web/aplicación a través de API a WordPress y realmente necesite que funcione la función getallheaders, puede usar esta solución:
$headers = [];
if ( function_exists( 'getallheaders' ) ) {
$headers = getallheaders();
} else {
function getallheaders() {
$headers = [];
foreach ($_SERVER as $name => $value) {
if (substr($name, 0, 5) == 'HTTP_') {
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
}
$headers = getallheaders();
}