Foros del Web » Programando para Internet » PHP »

cambiar register_globals sin acceso al php.ini

Estas en el tema de cambiar register_globals sin acceso al php.ini en el foro de PHP en Foros del Web. Hola. Hace un tiempo comence con un sitio y use para todos mis script las siguientes lineas, siempre presentes al inicio de cada uno mediante ...
  #1 (permalink)  
Antiguo 28/08/2006, 16:22
 
Fecha de Ingreso: junio-2004
Ubicación: Buenos Aires
Mensajes: 60
Antigüedad: 13 años, 6 meses
Puntos: 1
cambiar register_globals sin acceso al php.ini

Hola.
Hace un tiempo comence con un sitio y use para todos mis script las siguientes lineas, siempre presentes al inicio de cada uno mediante un include:

ini_set('register_globals','Off');

que habia sacado de un sitio de ayuda de php en español. Ya con esto me senti tranquilo de usar nombres de variables locales y, por ejemplo, de sesion, iguales sin que haya problemas.
Pero hora que estoy probando el sitio en el servidor contratado me doy cuenta que ellos tienen register_globals en ON y mi script para pasarlo a Off no funciona, por lo que en muchas oportunidades, variables diferentes se me mezclan por tener el mismo nombre. Por ejemplo:

$usuario y $_SESSION['usuario']

Estuve buscando otra forma de anular esta confioguracion del php.ini desde mis scripts pero no la encuentro. Como puedo hacer?

Desde a muchas gracias.
  #2 (permalink)  
Antiguo 28/08/2006, 16:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si no tienes acceso a php.ini y no puedes usar ini_set() .. las otras alternativas son:

.htaccess
php.ini (personalizado para tu sitio si lo tienes).

Tendrías que contactar con tu proveedor a ver que opciones tienes.

En cualquier caso con:

php_value directiva valor
ó
php_flag directiva valor

(en un php.ini própio o .htaccess) así es como definirías tus directivas de PHP.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 28/08/2006, 16:41
Avatar de merolhack  
Fecha de Ingreso: junio-2006
Ubicación: México
Mensajes: 1.242
Antigüedad: 11 años, 6 meses
Puntos: 16
Mira esto de el foro de joomla:

Tip: Como lograr register globals off sin usar el .htaccess
http://forum.joomla.org/index.php/topic,55940.0.html

O que pongas esto en tu .htaccess
php_value register_globals 0
  #4 (permalink)  
Antiguo 28/08/2006, 16:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por merolhack Ver Mensaje
Mira esto de el foro de joomla:

Tip: Como lograr register globals off sin usar el .htaccess
http://forum.joomla.org/index.php/topic,55940.0.html

O que pongas esto en tu .htaccess
php_value register_globals 0
mm .. Pero la propuesta que indica en ese mensaje de otro foro .. depende mucho del "proveedor".

Por "probar" que no quede .. pero encuentro que no está de más confirmarlo con tu proveedor e ir al grano.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 28/08/2006, 18:28
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 11 años, 11 meses
Puntos: 5
Si todo lo demás falla....

Este link está en los comentarios de los usuarios sobre register_globals, en php.net. Ahí muestra una manera de "borrar" las variables globales creadas por register_globals On. (nunca lo usé pero creo que podría llegar a servirte si no podés solucionarlo de otra manera)

http://andreineculau.wordpress.com/?s=register_globals


Suerte
Califa
  #6 (permalink)  
Antiguo 28/08/2006, 22:03
 
Fecha de Ingreso: junio-2004
Ubicación: Buenos Aires
Mensajes: 60
Antigüedad: 13 años, 6 meses
Puntos: 1
Gracias a todos...
Para comenzar a realizar pruebas con sus propuestas, en primer lugar me gustaria saber en donde deberia encontrar ese .htacces
  #7 (permalink)  
Antiguo 28/08/2006, 22:07
Avatar de merolhack  
Fecha de Ingreso: junio-2006
Ubicación: México
Mensajes: 1.242
Antigüedad: 11 años, 6 meses
Puntos: 16
el .htacces va al en el directorio principal, bueno yo cuando instale joomla ya venia :)
  #8 (permalink)  
Antiguo 28/08/2006, 22:13
 
Fecha de Ingreso: junio-2004
Ubicación: Buenos Aires
Mensajes: 60
Antigüedad: 13 años, 6 meses
Puntos: 1
MMm lo suponia, y como recine lo busque y no estaba llame al soporte del servidor. Me dicen que ellos no tienen el PHP instalado como modulo de Apache por diferentes motivos, entre uno de ellos performance. Dicen que lo tienen como FAST CGI, y que por tal motivo no tengo el .htaccess. Tambien me comentan que no hay forma de cambiar desde afuera esa directiva!

Que opinan? Conviene modificar mis programas para que variables locales no tengan el mismo nombre que las de servidor, o ejecutar un codigo comun antes de todos mis scripts para cambiar esto?
  #9 (permalink)  
Antiguo 28/08/2006, 22:32
Avatar de merolhack  
Fecha de Ingreso: junio-2006
Ubicación: México
Mensajes: 1.242
Antigüedad: 11 años, 6 meses
Puntos: 16
Sonrisa

este... tu puedes poner tu propio .htacces eh! aqui te dejo un ejemplo de el que viene con joomla:

Código PHP:
##
# @version $Id: htaccess.txt 4085 2006-06-21 16:03:54Z stingrey $
# @package Joomla
# @copyright Copyright (C) 2005 Open Source Matters. All rights reserved.
# @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
# Joomla! is Free Software
##


#####################################################
#  READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE
#
# The line just below this section: 'Options FollowSymLinks' may cause problems
# with some server configurations.  It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that dissallows changing it in
# your .htaccess file.  If using it causes your server to error out, comment it out (add # to 
# beginning of line), reload your site in your browser and test your sef url's.  If they work,
# it has been set by your server administrator and you do not need it set here. 
#
# Only use one of the two SEF sections that follow.  Lines that can be uncommented
# (and thus used) have only one #.  Lines with two #'s should not be uncommented
# In the section that you don't use, all lines should start with #
#
# For Standard SEF, use the standard SEF section.  You can comment out
# all of the RewriteCond lines and reduce your server's load if you
# don't have directories in your root named 'component' or 'content'
#
# If you are using a 3rd Party SEF or the Core SEF solution
# uncomment all of the lines in the '3rd Party or Core SEF' section
#
#####################################################

#####  SOLVING PROBLEMS WITH COMPONENT URL's that don't work #####
# SPECIAL NOTE FOR SMF USERS WHEN SMF IS INTEGRATED AND BRIDGED
# OR ANY SITUATION WHERE A COMPONENT's URL's AREN't WORKING
#
# In both the 'Standard SEF', and '3rd Party or Core SEF' sections the line:
# RewriteCond %{REQUEST_URI} ^(/component/option,com) [NC,OR] ##optional - see notes##
# May need to be uncommented.  If you are running your Joomla/Mambo from
# a subdirectory the name of the subdirectory will need to be inserted into this
# line.  For example, if your Joomla/Mambo is in a subdirectory called '/test/',
# change this:
# RewriteCond %{REQUEST_URI} ^(/component/option,com) [NC,OR] ##optional - see notes##
# to this:
# RewriteCond %{REQUEST_URI} ^(/test/component/option,com) [NC,OR] ##optional - see notes##
#
#####################################################


##  Can be commented out if causes errors, see notes above.
Options FollowSymLinks

#
#  mod_rewrite in use

RewriteEngine On


#  Uncomment following line if your webserver's URL
#  is not directly related to physical file paths.
#  Update Your Joomla/MamboDirectory (just / for root)

# RewriteBase /


########## Begin - Joomla! core SEF Section
############# Use this section if using ONLY Joomla! core SEF
## ALL (RewriteCond) lines in this section are only required if you actually
## have directories named 'content' or 'component' on your server
## If you do not have directories with these names, comment them out.
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond 
%{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} ^(/component/option,com) [NC,OR]         ##optional - see notes##
RewriteCond %{REQUEST_URI} (/|.htm|.php|.html|/[^.]*)$  [NC]
RewriteRule ^(content/|component/) index.php
#
########## End - Joomla! core SEF Section



########## Begin - 3rd Party SEF Section
############# Use this section if you are using a 3rd party (Non Joomla! core) SEF extension - e.g. OpenSEF, 404_SEF, 404SEFx, SEF Advance, etc
#
#RewriteCond %{REQUEST_URI} ^(/component/option,com) [NC,OR]         ##optional - see notes##
#RewriteCond %{REQUEST_URI} (/|\.htm|\.php|\.html|/[^.]*)$  [NC]
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule (.*) index.php
#
########## End - 3rd Party SEF Section 
Solo lo copias y lo pegas en un archivo de texto, y lo guardas como .htaccess
  #10 (permalink)  
Antiguo 29/08/2006, 00:15
 
Fecha de Ingreso: junio-2004
Ubicación: Buenos Aires
Mensajes: 60
Antigüedad: 13 años, 6 meses
Puntos: 1
Sucedio lo que la persona que me atendio me dijo que pasaria :( Da error de servidor cuando intentas usar un .htaccess
  #11 (permalink)  
Antiguo 29/08/2006, 00:21
 
Fecha de Ingreso: junio-2004
Ubicación: Buenos Aires
Mensajes: 60
Antigüedad: 13 años, 6 meses
Puntos: 1
Bueno, ahora me pasa que comente algunas lineas que estaban (con#) y el error no sale mas, pero no me respeta la directiva php_value register_globals 0 y sigo con problemas.
  #12 (permalink)  
Antiguo 29/08/2006, 00:24
 
Fecha de Ingreso: junio-2004
Ubicación: Buenos Aires
Mensajes: 60
Antigüedad: 13 años, 6 meses
Puntos: 1
No, perdon, habia borrado el archivo en vez de cambiarlo por el comentado. Esta confirmado, con el .htaccess da 500 Internal Server Error
  #13 (permalink)  
Antiguo 29/08/2006, 08:55
Avatar de merolhack  
Fecha de Ingreso: junio-2006
Ubicación: México
Mensajes: 1.242
Antigüedad: 11 años, 6 meses
Puntos: 16
Sonrisa

Pues bueno, en realidad el joomla lo trae por defecto en htaccess.txt y funciona asi.

A lo mejor si lo dejas en htaccess.txt, pueda servir

este es un buen manual de como usar el htaccess

http://mundogeek.net/archivos/2005/05/04/htaccess/

o en google hay muchos más
  #14 (permalink)  
Antiguo 29/08/2006, 09:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por boxin Ver Mensaje
MMm lo suponia, y como recine lo busque y no estaba llame al soporte del servidor. Me dicen que ellos no tienen el PHP instalado como modulo de Apache por diferentes motivos, entre uno de ellos performance. Dicen que lo tienen como FAST CGI, y que por tal motivo no tengo el .htaccess. Tambien me comentan que no hay forma de cambiar desde afuera esa directiva!

Que opinan? Conviene modificar mis programas para que variables locales no tengan el mismo nombre que las de servidor, o ejecutar un codigo comun antes de todos mis scripts para cambiar esto?
Eso de que PHP bajo CGI tenga mejor "perfomance" mm no es del todo cierto .. si que tiene mejor "seguridad" implicita por el hecho de usarlo bajo CGI (un usuario definido por servidor virtual .. etc). Pero .. PHP en modo "Módulo de Apache" puedes confirgurarlo como "safe mode" para mejorar la seguridad y tener las mismas virtudes que CGI en ese aspecto.

En modo CGI también puedes usar .htaccess y sino php.ini própios es cosa de que tu proveedor se preste a hacer los ajustes necesarios en sus servidores. Si no te lo hacen ... podrías ir evaluando cambiarte a otro que si te dé soporte a php.ini personalizados o .htaccess minimo . .así no podras ni usar técnicas como "mod_rewrite" (muy interesantes para hacer re-escritura del URL con "URL amigables" ..), tampoco podrás usar autentificación HTTP (por usar PHP bajo CGI) .. entre otras cosas.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #15 (permalink)  
Antiguo 29/08/2006, 09:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por merolhack Ver Mensaje
Pues bueno, en realidad el joomla lo trae por defecto en htaccess.txt y funciona asi.

A lo mejor si lo dejas en htaccess.txt, pueda servir

este es un buen manual de como usar el htaccess

http://mundogeek.net/archivos/2005/05/04/htaccess/

o en google hay muchos más
Que cierto CMS defina tal .htaccess no quiere decir que todo servidor lo soporte (eso supongo que algún comentario harán en esa aplicación en sus manuales de instalación/configuración).

Por ejemplo .. para poder usar .htaccess (de Apache) es necesario permitir la "re-escritura" de opciones .. me parece que es con:

allowoverride
http://httpd.apache.org/docs/1.3/mod...#allowoverride

Pero esta configuración sólo la puede hacer -tu- proveedor (hosting) si es que no tienes acceso a la configuración de tu servidor HTTP.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #16 (permalink)  
Antiguo 29/08/2006, 09:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
Esta funcion me ha servido a mi para "emular" el globals off, espero te sirva:
Código PHP:
function unregister_GLOBALS()
{
   if (!
ini_get('register_globals')) {
       return;
   }

   
// Might want to change this perhaps to a nicer error
   
if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) {
       die(
'GLOBALS overwrite attempt detected');
   }

   
// Variables that shouldn't be unset
   
$noUnset = array('GLOBALS',  '_GET',
                    
'_POST',    '_COOKIE',
                    
'_REQUEST''_SERVER',
                    
'_ENV',     '_FILES');

   
$input array_merge($_GET,    $_POST,
                        
$_COOKIE$_SERVER,
                        
$_ENV,    $_FILES,
                        isset(
$_SESSION) && is_array($_SESSION) ? $_SESSION : array());
   
   foreach (
$input as $k => $v) {
       if (!
in_array($k$noUnset) && isset($GLOBALS[$k])) {
           unset(
$GLOBALS[$k]);
       }
   }
}

unregister_GLOBALS(); 
Si le agrega un poco de mas lentitud a tu codigo por deshacer lo que php hizo al inicio, pero sirve cuando el hosting no puede cambiar los valores. Saludos!
  #17 (permalink)  
Antiguo 01/09/2006, 03:05
 
Fecha de Ingreso: junio-2004
Ubicación: Buenos Aires
Mensajes: 60
Antigüedad: 13 años, 6 meses
Puntos: 1
Bueno, me parece que voy a optar por el codigo que redefine las variables en cada script, por ahora. Me doy cuenta de que es una mala costumbre usar el mismo nombre para distintos tipos de variables, aunque muchas veces es comodo y ayuda a entender el codigo.

Muchas gracias a todos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 18:06.