6

I want to have a constant (a string) that is available to all PHP-scripts on the server.

According to http://php.net/manual/en/function.parse-ini-file.php this is quite easy if you parse an extra .ini file, however I don't want to parse an extra file, I want to set my constant in the global php.ini without having to parse anything in the scripts. (In fact that's the whole point because I need the constant to find the stuff to include/parse/etc: When I know where this extra .ini file would be, I don't need it anymore!)

Just inventing a new constant in php.ini and then trying to access it with ini_get() does not work, is there any other way?

I compile Apache and PHP myself, so I could also set the constant at compile-time and/or use Apache-constants if that is neccessary.

3 Answers 3

11

You can use a PHP auto_prepend_file script in your PHP ini to do this as it will be run before any of your user-land scripts:

Specifies the name of a file that is automatically parsed before the main file. The file is included as if it was called with the require function, so include_path is used.

So you can add an ini line like:

auto_prepend_file="/home/user/script.php"

The in /home/user/script.php:

define('CONSTANT_NAME', 'your nice value here');

Now in your PHP scripts you can access CONSTANT_NAME from wherever you like as it is available in all PHP scripts.

I use this technique on my staging server that uses mod_rewrite based mass virtual hosting so I can give my PHP scripts an accurate document root. I have discussed this in a blog post before.

Sign up to request clarification or add additional context in comments.

1 Comment

Unfortunately it is as close as you are going to get. What you want is not actually possible ):
1

Simple. Create a file xxx.php where you define your constant and add that file to the global include_path in php.ini. I would like to add though that keeping this kind of global constants or variables is not a recommended way of working as you may forget where are the constants coming from and is not making your apps very portable and explicit to other developers.

1 Comment

The Include Path contains directories, not files.
0

From what you've said I think you'll find that there will already be something similar already available in $_SERVER, in particular 'DOCUMENT_ROOT'.

2 Comments

Exactly, I need something very similar to DOCUMENT_ROOT (but not DOCUMENT_ROOT, which is the whole point of this question)
@Robby75 that is exactly what I am using the solution in my answer to achieve on my staging server: stackoverflow.com/a/10751734/461813

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.