php - show_404 - Codeigniter muestra una página en blanco en lugar de mensajes de error
show_404 codeigniter custom (21)
¿Estás usando el símbolo @ en cualquier lugar?
Si tiene algo como:
@include(''page_with_error.php'');
Obtendrá una página en blanco.
Estoy usando Codeigniter, y en lugar de mensajes de error, estoy obteniendo una página en blanco. ¿Hay alguna manera de mostrar mensajes de error de PHP en su lugar? Es muy difícil de depurar cuando no recibo retroalimentación.
Mi entorno es Ubuntu con Apache.
A menudo, cuando Codeigniter no muestra nada, hay un error de sintaxis. Sobre todo si la aplicación se estaba ejecutando sin problemas previamente, solo mira tus ediciones más recientes. Para mí, la experiencia esta vez fue la aplicación completa, no solo una página. Así que hice una exploración rápida del cerebro para ver las ediciones más recientes que había hecho y trabajé hacia atrás, revisando cada archivo en el que había trabajado ese día. Resultó ser algunas cláusulas de "dónde" en dos archivos modelo: por ejemplo, tuve
$this->db->where(''Type'' => ''Blog''); rather than $this->db->where(''Type'', ''Blog'');
Asegúrese de no tener un archivo index.html en blanco en su carpeta raíz. Sucede :)
Asegúrese de que php5-mysql
esté instalado.
Codeigniter no parece lanzar un mensaje de error cuando estaba haciendo referencia a una vista que no existía.
En mi ejemplo, yo tenía dentro de mi controlador:
$this->load->view(''/admin/index/access_controls/groups/add'');
Debido a que el archivo no existía, recibí un espacio en blanco que decía "Se ha producido un error". Cambié el código a:
$this->load->view(''/admin/access_controls/groups/add'');
Así fue como resolví el mismo problema que parece tener, espero que esto ayude a alguien algún día.
Dado que ninguna de las soluciones parece estar funcionando para usted hasta el momento, pruebe esta:
ini_set(''display_errors'', 1);
http://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors
Esto le dice explícitamente a PHP que muestre los errores. Algunos entornos pueden tener esto deshabilitado por defecto.
Esta es la configuración de mi entorno en index.php
:
/*
*---------------------------------------------------------------
* APPLICATION ENVIRONMENT
*---------------------------------------------------------------
*/
define(''ENVIRONMENT'', ''development'');
/*
*---------------------------------------------------------------
* ERROR REPORTING
*---------------------------------------------------------------
*/
if (defined(''ENVIRONMENT''))
{
switch (ENVIRONMENT)
{
case ''development'':
// Report all errors
error_reporting(E_ALL);
// Display errors in output
ini_set(''display_errors'', 1);
break;
case ''testing'':
case ''production'':
// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL ^ E_NOTICE);
// Don''t display errors (they can still be logged)
ini_set(''display_errors'', 0);
break;
default:
exit(''The application environment is not set correctly.'');
}
}
En primer lugar, debe otorgar el permiso de su carpeta Codeigniter. Puede ser el problema de permiso y luego iniciar su servidor.
Este comportamiento se produce cuando tienes un error de sintaxis php básico en tu código. En caso de que tenga errores de sintaxis, el analizador de php no analiza el código completamente y no muestra nada, por lo que todas las sugerencias anteriores solo funcionarían si tiene errores que no sean de sintaxis.
Esto me sucede cada vez que hago autocarga cosas en autoload.php como la ''base de datos''
Para resolver esto, si está usando el sistema operativo Windows
Abra su php.ini. Buscar y descomentar esta línea -
extension=php_mysql.dll
(Compruebe también si la directiva PHP señala dónde se encuentran sus extensiones.
El mío esextension_dir = "C:/php-5.4.8-Win32-VC9-x86/ext"
)Reinicie Apache y actualice su página
Intente agregar esto a su archivo index.php
error_reporting(E_ALL);
Me encontré con esto porque tenía una CLI ejecutándose a través de cron como el usuario raíz, creando así archivos de registro con la raíz: raíz. Cuando intentaba navegar a un URI, todo funcionaría bien, pero es probable que CI muestre la página en blanco porque no tenía permiso de escritura en el archivo de registro.
Otro método es ver si ha superado el error al verificar su código por accidente. Busque todo su código para cualquier instancia de error_reporting (). Si lo llama sin parámetros, simplemente devuelve el nivel actual y es inofensivo. Si lo llama con un parámetro, como 0 (cero), desactivará el informe de errores.
Puede probar esto en CodeIgnitor consultando su biblioteca central en ../system/core/Common.php y buscando una sección que se encuentre en la línea 615 que se ve así:
if (($severity & error_reporting()) !== $severity)
{
return;
}
Agrega algo como:
if (($severity & error_reporting()) !== $severity)
{
echo "Suppressing errors!";
return;
}
y deberías ser capaz de atrapar errores superados y depurar desde allí.
Si está utilizando CI 2.0 o posterior, puede cambiar el tipo de ENVIRONMENT
en su index.php
para define(''ENVIRONMENT'', ''testing'');
.
Alternativamente, puede agregar php_flag display_errors on
su archivo .htaccess
.
Si tiene esto en su php.ini:
display_error = On;
y tiene esto en su aplicación de CI al mismo tiempo
error_reporting(0);
obtendrá HTTP / 1.1 200 OK y una página completamente bancaria.
Esto se debe a que cuando display_error está activado, php-fpm siempre devuelve el código HTTP 200. Y todos los errores a la salida están prohibidos por error_reporting (0).
Para la aplicación de CI, la entrada index.php configura el entorno de ejecución como fuelles:
if(isset($_SERVER[''SERVER_ENV''])) {
define(''ENVIRONMENT'', $_SERVER[''SERVER_ENV'']);
} else {
define(''ENVIRONMENT'', ''development'');
}
if (defined(''ENVIRONMENT''))
{
switch (ENVIRONMENT)
{
case ''development'':
error_reporting(E_ALL);
ini_set(''display_errors'', 1);
break;
case ''testing'':
case ''production'':
error_reporting(0);
break;
default:
exit(''The application environment is not set correctly.'');
}
}
En resumen, cuando configura la directiva ENV en la configuración del servidor web, diga fastcgi_params de Nginx:
fastcgi_param SERVER_ENV production;
entonces CI establecerá automáticamente
error_reporting(0);
Tuve el mismo problema hace un par de días. Mi entorno de desarrollo es Win8 y el sitio web funcionaba bien, pero cuando subía los archivos al servidor de producción (Linux) se mostraba una página en blanco.
Resulta que los nombres de los modelos y los controladores deben comenzar con una letra mayúscula .
El archivo debe llamarse ''Blog.php'', con una ''B'' mayúscula.
Los nombres de clase deben comenzar con una letra mayúscula.
En el entorno de Windows, esto no importará ya que Windows no diferencia mayúsculas y minúsculas , pero en el entorno de Linux, los archivos no se mostrarán.
Espero haber ayudado.
Tuve el mismo problema y, como señaló Shayan Husaini, tuve un error de sintaxis no detectado.
Lo resolví usando php linter en la terminal:
php -l file.php
También puede usar algo como esto para usar el linter en cada archivo de una carpeta:
find -type f -name "*.php" -exec php -l ''{}'' /;
Y para filtrar solo los que tienen errores:
find -type f -name "*.php" -exec php -l ''{}'' /; | grep ''^[^N]''
Eso debería mostrar los archivos con errores de análisis y la línea donde está el error.
carga tu url helper cuando creas una función, por ejemplo,
visibility function_name () {
$this->load->helper(''url'');
}
el te mostrará los errores o una vista que hayas cargado.
comprueba si error_reporting está activado en el servidor o no, si no tienes esa id no obtendrás ningún error y solo una página en blanco. si está en un servidor compartido, puede habilitar el informe de errores a través de htaccess. En codeIgniter agrega lo siguiente en tu htaccess
php_flag display_errors On
y establecer
error_reporting(E_ERROR); ## or what ever setting desired in php
Espero que funcione para usted
por favor, compruebe que la carpeta de error está en la carpeta de la aplicación de no en mi caso, reemplace la carpeta de error en la carpeta de la aplicación
puedes configurarlo en el índice principal.php
define(''ENVIRONMENT'', ''development'');
/*
*---------------------------------------------------------------
* ERROR REPORTING
*---------------------------------------------------------------
*
* Different environments will require different levels of error reporting.
* By default development will show errors but testing and live will hide them.
*/
if (defined(''ENVIRONMENT''))
{
switch (ENVIRONMENT)
{
case ''development'':
error_reporting(E_ALL);
break;
case ''testing'':
case ''production'':
error_reporting(0);
break;
default:
exit(''The application environment is not set correctly.'');
}
}
yo también estaba enfrentando el mismo problema e intenté casi todas las cosas, pero finalmente reinicié mi servidor y encontré que todo comenzó a funcionar bien ... no sé cómo ... creo que fue un problema del lado del servidor por eso mi CÓDIGO PHP no estaba dando ningún error.