
Can I bulk fix PHP require/include references?
A pal of mine asks: "Ugh.. I'm facing server-move Hades.. am moving my site dadsrights.org to a hosted solution, and I have dozens and dozens of files with PHP require_once() includes like "/www/dadsrights/XX". They all need to be changed to "/nfs/www/dadsrights.org/XX". Help!!"
Annie, I am sure we can solve this by having you log in to their Unix server and running a simple script. This is, in fact, a perfect job for the Unix stream editor sed, which accepts patterns of the form s/old/new/g to replace all occurrences of "old" with "new". (the trailing 'g' applies it globally, meaning more than once in a single line, if applicable) But before we do this, it's always smart to back up all the files we're about to tweak. Just in case. :-) To do that, run this command: $ tar czvf php-file-backup.tgz ./*.phpThis will create a new file called "php-file-backup.tgz" that's a compressed 'tar' archive of all the files. If something goes south and things don't work, you can always unpack and restore all the PHP files with tar xzf php-file-backup.tgz). Now, ready for some shell script programming? Open up an editor (vi, pico, emacs, whatever) with the new name "fixphp.sh", and type in the following: #!/bin/sh cd the directory that contains the files you want to fix for fixme in *php do sed 's|/www/dadsrights/|/nfs/www/dadsrights.org/|g' $fixme > new mv new $fixme echo fixed $fixme done exit 0That's it. Now, save this out and execute it by feeding it to a subshell: $ sh fixphp.shYou will want to make sure that you've specified the correct directory in the script as you've typed it in, of course. Once you run the script, you should see a list of 'fixed xx, fixed yy' and when it completes, all your PHP include_once() directives should be working fine. Good luck!
Help others find this article at Del.icio.us, Digg, Netscape, Reddit, and Simpy.
Categorized:
CGI Scripts and Web Site Programming
(Article 3765)
Tagged: Previous: How do I scan my Windows 2000 disk to find bad blocks? Next: Tweak yaboot so Mac OS X is my default OS, not Ubuntu or Yellow Dog Linux? Subscribe!
Never miss another useful Q&A article again! Subscribe to AskDaveTaylor with Google Reader. Edit-in-place to the rescue! perl -i -p -e 's/\/www\/dadsrights\//\/nfs\/www\/dadsrights.org\//g' *.php Change the -i to -i.bak if you want foo.php to be saved as foo.php.bak before the changes ar emade Posted by: Sean at November 17, 2004 3:28 AMRight idea, but let's try for readability. ;^) perl -pi~ -e 's{/www/dadsrights/}{/nfs/www/dadsrights.org/}g' *.php Posted by: Brent Dax at November 25, 2004 8:48 AMHow about for a whole directory tree? Posted by: John at January 7, 2005 12:36 AMfor a whole directory tree, I'd use the find command probably something like for fixme in $(find . -type f -name "*.php") which should match all PHP files in the current directory and all subdirectories too. Posted by: Dave Taylor at January 7, 2005 1:40 AMI have a lot to say, but ...
I do have a comment, now that you mention it!
|
Search
Find just the answers you seek from among our 1700+ free tech support articles by using our Lijit search engine.
Help!
Subscribe to
Ask Dave Taylor!
Free Updates!
Sign up and get free weekly updates and special offers on books, seminars, workshops and more.
Articles and Reviews
Auctions and Online Shopping Blogs and RSS Feeds Building Web site traffic Business and Management Cell Phones and Mobile Phones CGI Scripts and Web Site Programming Computer and Internet Basics d) None of the Above HTML and CSS Mac OS X Help MySpace, Facebook, Twitter and Social Network Help Pay Per Click (PPC) Search Engine Optimization Shell Script Programming Sony PSP, MP3 Players, Etc. The Writing Business Unix and Linux Help Video Game Tips and Help Windows Help
Recent Entries
Join the List!
Book Links
|