views:

41

answers:

3

This is a general question. What are some techniques you employ to prevent the links in your PHP code from breaking every time you move a file or move a file into a different directory?

+1  A: 

If you move/rename a file that is linked throughout your web page and would like to ensure that links still work, I would write a 303 redirect (where and how depends on your web server and it's configuration).

Jan Hančič
+1  A: 

I use a configuration file wherein I define all the paths (using define()) to various directories like 'webroot', 'application', or 'css'

This way I need to change only one line in one file and the changes are affected in all files wherein this variable is used.

Gaurav Sharma
What happen if you move the directory (or the file itself) that contain all the paths? ;)
DaNieL
If you move the directory to a new location then you only need to change it's path in the config file but if you move the config file then you will have to make adjustments.
Gaurav Sharma
+1  A: 

For front end stuff, always use absolute URLs (start with '/' so you can move from domain to domain as needed).

For internal include() / require() type stuff, do as Gaurav suggests and use a config file that creates a constant to represent your path (so you can change it easily as needed from one location in your code).

For library type stuff (i.e. classes, functions, etc) that you want to reuse, I would add that to the include_path either via php.ini (global or local), .htaccess (if you are using apache) or via the ini_set() function. That way you can include these files by just the filename (i.e. <?php include_once('library.php'); ?>)

If you go the ini_set route, take a look at the auto_append directive (which in turn can be set via php.ini, .htaccess or ini_set)... that way you can have a 'bootstrap' file added to every page request that sets up your include_path for just that application without having to add the ini_set statement every where you turn.

With all that said, I recommend that you:

  • think your application layout ahead in advance, develop a common convention, and stick to it.
  • consider learning about design patterns (MVC, et al), which will get you thinking in new ways about how you design your applications
  • adopt the use of an application framework (CakePHP, Zend Framework, etc) which will come with a suggested (or mandated) file/directory layout and keep you from having to manage file locations and stuff.

Good luck!

xentek
Awesome write-up... Just what I needed. Thanks!
Matt