safe_mode
ha desaparecido de las opciones de PHP desde hace más de cinco años.
Advertencia: Esta característica ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a partir de PHP 5.4.0.
http://php.net/manual/es/features.safe-mode.php
Pero como WordPress aunque recomienda PHP 7+, soporta desde 5.2.4, lo ideal sería primero recuperar la versión de PHP y si es menor de 5.3 entonces ejecutar la función, sino saltarse dicha comprobación, ya que en caso contrario aparecerá el Warning avisando de que dicha opción está obsoleta o eliminada según la versión de PHP, ya desde marzo del 2012
@carloslongarela : gracias por la sugerencia.
Lo curioso del caso es que no sale ninguna advertencia ni provoca error alguno. Eso me hace suponer que la variable devuelve un valor false al no existir safe_mode.
El problema es que no podemos saltarnos la comprobación ya que la función «is_safe_mode» es utilizada después en otras partes del plugin.
¿Y si cambio el código y lo dejo así?
/**
* blcUtility::is_safe_mode()
* Checks if PHP is running in safe mode
*
* @return bool
*/
static function is_safe_mode(){
$safe_mode = 'false';
..................
return (bool)(int)$safe_mode;
}
}
-
Esta respuesta fue modificada hace 6 años, 9 meses por almendron.
-
Esta respuesta fue modificada hace 6 años, 9 meses por almendron.
Yo haría (código «de memoria», sin comprobar):
/**
* blcUtility::is_safe_mode()
* Checks if PHP is running in safe mode
*
* @return bool
*/
static function is_safe_mode(){
if ( version_compare( phpversion(), '5.3', '<' ) ) {
$safe_mode = ini_get( 'safe_mode' );
} else {
$safe_mode = false;
}
//Null, 0, '', '0' and so on count as false
if ( !$safe_mode ) return false;
//Test for some textual true/false variations
switch ( strtolower($safe_mode) ){
case 'on':
case 'true':
case 'yes':
return true;
case 'off':
case 'false':
case 'no':
return false;
default: //Let PHP handle anything else
return (bool)(int)$safe_mode;
}
}
Muchas gracias Carlos. En cuanto lo compruebe te digo algo (será ya mañana).
Un saludo.
El if mejor:
if ( version_compare( phpversion(), '5.3.0', '<' ) ) {
Lo que yo no entiendo es cómo el autor del plugin no se ha dado cuenta de estas cosas. Según parece la última actualización ha sido de hace 3 semanas, no es mucho tiempo.
@almendron sería interesante comunicarselo.
Un saludo
En la última actualización solo fue para cambiar algo relativo a la información: «Información actualizada del plugin». En realidad lleva un año sin actualizar. Creo que cambió de desarrollador.
Y tiene más problemas. Otro ya lo he puesto aquí. Y también hay otro relacionado con el motor de almacenamiento ya que el plugin no funciona si pones las tablas en InnoDb.
Todo esto ya lo he ido poniendo en el soporte del plugin pero de momento ni caso.
Lo malo es que se trata de un plugin bastante necesario.
Pues si no responde el actual dev, un fork del plugin, arreglo de todo tipo de bugs y nueva versión 😉
Ya me gustaría pero mis conocimientos no llegan a tanto 🙂
Bueno, a ver si es developer responde, sino nos lo planteamos, yo código, otro pruebas, otros bugs, otro la apariencia del backend 😉
-
Esta respuesta fue modificada hace 6 años, 8 meses por Carlos Longarela. Razón: syntax
Por mi encantado porque es un plugin genial. Cuenta conmigo.
Ya he hecho las pruebas cambiando el código y de momento todo correcto.
El problema es que antes ya no daba mensaje de error y ahora sigue sin darlo. Lo que puse al principio del hilo es de alguien que comprobó con alguna utilidad si el plugin era compatible con PHP 7.
Incluso he puesto un par de «echos» para que devuelva el valor que toma la variable pero no me salen por ningún sitio.
Os dejo el código que usa la función is_safe_mode():
//Redirects don't work when safe mode or open_basedir is enabled.
if ( !blcUtility::is_safe_mode() && !blcUtility::is_open_basedir() ) {
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
}
//Safe_mode status
if ( blcUtility::is_safe_mode() ){
$debug['Safe mode'] = array(
'state' => 'warning',
'value' => __('On', 'broken-link-checker'),
'message' => __('Redirects may be detected as broken links when safe_mode is on.', 'broken-link-checker'),
);
} else {
$debug['Safe mode'] = array(
'state' => 'ok',
'value' => __('Off', 'broken-link-checker'),
);
}
// Check for safe mode
if( blcUtility::is_safe_mode() ){
// Do it the safe mode way - obey the existing max_execution_time setting
$t = ini_get('max_execution_time');
if ($t && ($t < $max_execution_time))
$max_execution_time = $t-1;
} else {
// Do it the regular way
@set_time_limit( $max_execution_time * 2 ); //x2 should be plenty, running any longer would mean a glitch.
}
Cambios enviados en https://github.com/ManageWP/broken-link-checker/pull/30 aunque ya le han enviado otros pull requests hace unos seis meses y no los han incorporado, el código con las modificaciones en https://github.com/CarlosLongarela/broken-link-checker si no incorporan el pull se puede continuar a partir de aquí 🙂
Pues sí que lo has cogido con ganas 🙂
Creo que solo falta resolver el hecho de que no funcione con tablas InnoDB. El error es el siguiente:
1) Compruebas por ejemplo un enlace que el plugin te ha dado como «advertencia».
2) Comprueba que ahora es correcto y muestra «Ok».
3) Sin embargo, no cambia su estado en la tabla correspondiente. Así, si ahora buscas ese mismo enlace te encuentras con que está pendiente de revisar.
En resumen: no guarda los cambios en el estado del enlace.