register_global: Immernoch nix :-(
Heiko Baumann
- php
Hallo zusammen,
nachdem nun auf dem zentralen Webserver die register_globals auf off gestellt wurden, hat's nun auch mich erwischt - die Skripte laufen nicht mehr.
STOPP!!! Weiterlesen! g ! Ich habe die zahlreichen bereits vorhanden Postings und die entsprechenden Antworten gelesen, ausprobiert und immer wieder ausprobiert. Es _KLAPPT_NICHT.
Runtergebrochen auf das Wesentliche:
Seite 1: <form action=anzeigen.php method=GET name="Login"> ID eingeben: <input type=text name=id>
Seite 2 (anzeigen.php): Der wert ist einfach nicht vorhanden, weder mit $_GET[id] noch mit $_GET["id"] noch mit $HTTP_GET_VARS["id"]
Um's noch deutlicher zu sagen: var_dump($_GET) liefert NULL
In URL von anzeigen.php steht aber sogar explizit "localhost/anzeigen.php?id=123" (wenn 123 eingetippt wurde, selbstverständlich g)
Wer weiss darauf Rat?? Es liegt also wohl eher am Server, nehme ich stark an. Es wurde aber nur der besagte register_globals Wert auf off gesetzt.
Würde mich super freuen, wenn mir jemand nen Tipp geben könnte.
Besten Dank - Heiko.
[Anbei: php.ini]
[PHP]
;;;;;;;;;;;;;;;;;;; ; About this file ; ;;;;;;;;;;;;;;;;;;; ; ; This is the recommended, PHP 4-style version of the php.ini-dist file.... engine = On short_open_tag = On asp_tags = Off precision = 14 y2k_compliance = Off
output_buffering = 4096
output_handler =
zlib.output_compression = Off
implicit_flush = Off
allow_call_time_pass_reference = Off safe_mode = On safe_mode_gid = Off safe_mode_include_dir =
safe_mode_exec_dir = ./
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
disable_functions = expose_php = On
max_execution_time = 30 memory_limit = 8M
error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
display_errors = Off
display_startup_errors = Off
log_errors = On track_errors = On
warn_plus_overloading = Off variables_order = "GPCS"
register_globals = Off register_argc_argv = Off post_max_size = 8M gpc_order = "GPC"
; Magic quotes ;
; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = Off
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ' with '' instead of '). magic_quotes_sybase = Off
; Automatically add files before or after any PHP document. auto_prepend_file = auto_append_file =
; As of 4.0b4, PHP always outputs a character encoding by default in ; the Content-type: header. To disable sending of the charset, simply ; set it to be empty. ; ; PHP's built-in default is text/html default_mimetype = "text/html" ;default_charset = "iso-8859-1"
; Always populate the $HTTP_RAW_POST_DATA variable. ;always_populate_raw_post_data = On
;;;;;;;;;;;;;;;;;;;;;;;;; ; Paths and Directories ; ;;;;;;;;;;;;;;;;;;;;;;;;;
; UNIX: "/path1:/path2" ;include_path = ".:/php/includes" ; ; Windows: "\path1;\path2" ;include_path = ".;c:\php\includes"
; The root of the PHP pages, used only if nonempty. ; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root ; if you are running php as a CGI under any web server (other than IIS) ; see documentation for security issues. The alternate is to use the ; cgi.force_redirect configuration below doc_root =
; The directory under which PHP opens the script using /~usernamem used only ; if nonempty. user_dir =
; Directory in which the loadable extensions (modules) reside. extension_dir = ./
; Whether or not to enable the dl() function. The dl() function does NOT work ; properly in multithreaded servers, such as IIS or Zeus, and is automatically ; disabled on them. enable_dl = On
;;;;;;;;;;;;;;;; ; File Uploads ; ;;;;;;;;;;;;;;;;
; Whether to allow HTTP file uploads. file_uploads = Off
; Temporary directory for HTTP uploaded files (will use system default if not ; specified). ;upload_tmp_dir =
; Maximum allowed size for uploaded files. upload_max_filesize = 2M
;;;;;;;;;;;;;;;;;; ; Fopen wrappers ; ;;;;;;;;;;;;;;;;;;
; Whether to allow the treatment of URLs (like http:// or ftp://) as files. allow_url_fopen = On
; Define the anonymous ftp password (your email address) ;from="john@doe.com"
;;;;;;;;;;;;;;;;;;;;;; ; Dynamic Extensions ; ;;;;;;;;;;;;;;;;;;;;;; ; ; If you wish to have an extension loaded automatically, use the following ; syntax: ; ; extension=modulename.extension ; ; For example, on Windows: ; ; extension=msql.dll ; ; ... or under UNIX: ; ; extension=msql.so ; ; Note that it should be the name of the module only; no directory information ; needs to go here. Specify the location of the extension with the ; extension_dir directive above.
;;;;;;;;;;;;;;;;;;; ; Module Settings ; ;;;;;;;;;;;;;;;;;;;
[Syslog] ; Whether or not to define the various syslog variables (e.g. $LOG_PID, ; $LOG_CRON, etc.). Turning it off is a good idea performance-wise. In ; runtime, you can define these variables by calling define_syslog_variables(). define_syslog_variables = Off
[mail function] ; For Win32 only. SMTP = localhost
; For Win32 only. sendmail_from = me@localhost.com
; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ;sendmail_path =
[Java] ;java.class.path = .\php_java.jar ;java.home = c:\jdk ;java.library = c:\jdk\jre\bin\hotspot\jvm.dll ;java.library.path = .\
[SQL] sql.safe_mode = Off
[ODBC] ;odbc.default_db = Not yet implemented ;odbc.default_user = Not yet implemented ;odbc.default_pw = Not yet implemented
; Allow or prevent persistent links. odbc.allow_persistent = On
; Check that a connection is still valid before reuse. odbc.check_persistent = On
; Maximum number of persistent links. -1 means no limit. odbc.max_persistent = -1
; Maximum number of links (persistent + non-persistent). -1 means no limit. odbc.max_links = -1
; Handling of LONG fields. Returns number of bytes to variables. 0 means ; passthru. odbc.defaultlrl = 4096
; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. ; See the documentation on odbc_binmode and odbc_longreadlen for an explanation ; of uodbc.defaultlrl and uodbc.defaultbinmode odbc.defaultbinmode = 1
[MySQL] ; Allow or prevent persistent links. mysql.allow_persistent = On
; Maximum number of persistent links. -1 means no limit. mysql.max_persistent = -1
; Maximum number of links (persistent + non-persistent). -1 means no limit. mysql.max_links = -1
; Default port number for mysql_connect(). If unset, mysql_connect() will use ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the ; compile-time value defined MYSQL_PORT (in that order). Win32 will only look ; at MYSQL_PORT. mysql.default_port =
; Default socket name for local MySQL connects. If empty, uses the built-in ; MySQL defaults. mysql.default_socket =
; Default host for mysql_connect() (doesn't apply in safe mode). mysql.default_host =
; Default user for mysql_connect() (doesn't apply in safe mode). mysql.default_user =
mysql.default_password =
[Session] ; Handler used to store/retrieve data. session.save_handler = files
; Argument passed to save_handler. In the case of files, this is the path ; where data files are stored. Note: Windows users have to change this ; variable in order to use PHP's session functions. session.save_path = /tmp
; Whether to use cookies. session.use_cookies = 1
; Name of the session (used as cookie name). session.name = PHPSESSID
; Initialize session on request startup. session.auto_start = 0
; Lifetime in seconds of cookie or, if 0, until browser is restarted. session.cookie_lifetime = 0
; The path for which the cookie is valid. session.cookie_path = /
; The domain for which the cookie is valid. session.cookie_domain =
; Handler used to serialize data. php is the standard serializer of PHP. session.serialize_handler = php
; Percentual probability that the 'garbage collection' process is started ; on every session initialization. session.gc_probability = 1
; After this number of seconds, stored data will be seen as 'garbage' and ; cleaned up by the garbage collection process. session.gc_maxlifetime = 1440
; Check HTTP Referer to invalidate externally stored URLs containing ids. ; HTTP_REFERER has to contain this substring for the session to be ; considered as valid. session.referer_check =
; How many bytes to read from the file. session.entropy_length = 0
; Specified here to create the session id. session.entropy_file =
;session.entropy_length = 16
;session.entropy_file = /dev/urandom
; Set to {nocache,private,public} to determine HTTP caching aspects. session.cache_limiter = nocache
; Document expires after n minutes. session.cache_expire = 180
; use transient sid support if enabled by compiling with --enable-trans-sid. session.use_trans_sid = 1
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
mssql.allow_persistent = On
mssql.max_persistent = -1
[Assertion] ; Assert(expr); active by default. ;assert.active = On
; Issue a PHP warning for each failed assertion. ;assert.warning = On
; Don't bail out by default. ;assert.bail = Off
; User-function to be called if an assertion fails. ;assert.callback = 0
; Eval the expression with current error_reporting(). Set to true if you want ; error_reporting(0) around the eval(). ;assert.quiet_eval = 0
[Ingres II] ; Allow or prevent persistent links. ingres.allow_persistent = On
; Maximum number of persistent links. -1 means no limit. ingres.max_persistent = -1
; Maximum number of links, including persistents. -1 means no limit. ingres.max_links = -1
; Default database (format: [node_id::]dbname[/srv_class]). ingres.default_database =
; Default user. ingres.default_user =
; Default password. ingres.default_password =
[Verisign Payflow Pro] ; Default Payflow Pro server. pfpro.defaulthost = "test-payflow.verisign.com"
; Default port to connect to. pfpro.defaultport = 443
; Default timeout in seconds. pfpro.defaulttimeout = 30
; Default proxy IP address (if required). ;pfpro.proxyaddress =
; Default proxy port. ;pfpro.proxyport =
; Default proxy logon. ;pfpro.proxylogon =
; Default proxy password. ;pfpro.proxypassword =
[Sockets] ; Use the system read() function instead of the php_read() wrapper. sockets.use_system_read = On
Runtergebrochen auf das Wesentliche:
Seite 1:
<form action=anzeigen.php method=GET name="Login">
ID eingeben: <input type=text name=id>
Seite 2 (anzeigen.php):
Der wert ist einfach nicht vorhanden, weder mit
$_GET[id] noch mit
$_GET["id"] noch mit
$HTTP_GET_VARS["id"]
Um's noch deutlicher zu sagen:
var_dump($_GET) liefert NULL
Und was sagt phpinfo(INFO_VARIABLES); ?
Gruß,
soenk.e
Der wert ist einfach nicht vorhanden, weder mit
$_GET[id] noch mit
$_GET["id"] noch mit
$HTTP_GET_VARS["id"]
Um's noch deutlicher zu sagen:
var_dump($_GET) liefert NULL
Und was sagt phpinfo(INFO_VARIABLES); ?
HTTP_GET_VARS["id"]
HTTP_SERVER_VARS["REDIRECT_QUERY_STRING"]
HTTP_SERVER_VARS["QUERY_STRING"]
HTTP_SERVER_VARS["argv"]
HTTP_ENV_VARS["REDIRECT_QUERY_STRING"]
HTTP_ENV_VARS["QUERY_STRING"]
zeigen alle = 123.
Ich fasse es nicht!
Ne, also das ist mir zu blöde. Hey, irgendwer hat doch hier gezaubert, oder??
*grübel*.. na gut, es klappt jetzt *WARUMAUCHIMMER* über $$HTTP_POST_VARS["id"]. Aber dann gehts ja weiter -
ich speichere das in einer Session:
@session_start();
session_register('s_uid');
und weise das dann zu:
$s_uid = $HTTP_POST_VARS["uid"];
Noch in der gleichen Seite habe ich Zugriff auf $s_uid.
In einer anderen möchte darauf zugreifen, und zwar mit
@session_start();
$gespeicherte_id = $s_uid;
Naja, und dann ist hier Feierabend, $gespeicherte_id ist leer.
Woran liegt denn das nun schon wieder?? (Bitte, Sönke, tipp es einfach ein, ich kopiere es über die Zwischenablage - hat vorhin auch funktioniert - das muss mit Magie zu tun haben :-))
Besten, wenn auch ziemlich konfusen Dank - Heiko!
Und was sagt phpinfo(INFO_VARIABLES); ? <---------------------\
|
@session_start(); | session_register('s_uid'); | $s_uid = $HTTP_POST_VARS["uid"]; |
|
In einer anderen möchte darauf zugreifen, und zwar mit | @session_start(); | $gespeicherte_id = $s_uid; |
|
Naja, und dann ist hier Feierabend, $gespeicherte_id ist leer. |
| Habe Sessions nie benutzt und kenne mich deshalb damit nicht aus. | Aber: | | "If track_vars is enabled and register_globals is disabled, only | members of the global associative array $HTTP_SESSION_VARS can be | registered as session variables. The restored session variables | will only be available in the array $HTTP_SESSION_VARS. | | Example 1. Registering a variable with track_vars enabled | | <?php | session_register("count"); | $HTTP_SESSION_VARS["count"]++; | ?>" | | Weiterhin: | | "If register_globals is enabled, then all global variables can be | registered as session variables and the session variables will be | restored to corresponding global variables. | | Example 2. Registering a variable with register_globals enabled | | <?php | session_register("count"); | $count++; | ?>" | | Da Du Deine gePOSTete Variable nicht finden konntest bzw. selbige in | $HTTP_POST_VARS steckte, gehe ich mal davon aus, daß Du auch bei den | Sessions so vorgehen und statt $count $HTTP_SESSION_VARS benutzen | solltest. | Und wenn ich mich recht entsinne, fing der ganze Ärger ja damit an, | daß Du register_globals ausgeschaltet hattest. | | Also: Obige Anleitungsauszüge nochmal durchlesen. Und dann ----------/
Und nebenbei bemerkt: Fehlermeldungen mit @ zu unterdrücken ist eine sehr schlechte Idee - Fehlermeldungen sind dazu da, gelesen zu werden. Und auf Deinem Server ist es obendrein unnötig, denn dank "display_errors = Off" und "log_errors = On" ist die Ausgabe von Fehlermeldungen zum Webbrowser eh abgeschaltet, sie sammeln sich stattdessen in der error_log-Datei des Webservers. Schau mal rein, vielleicht steht ja auch was zu Deinem aktuellen Problem drin.
Gruß, soenk.e