Heiko Baumann: register_global: Immernoch nix :-(

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

  1. 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

    1. 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!

      1. 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