phpsedoscommerce

Globally Replace Old School $PHP_SELF with $SERVER['PHP_SELF'] using sed


Not being an sed expert, I need to replace all instances of the string $PHP_SELF with $_SERVER['PHP_SELF'] globally in a directory.

This is an "old school" osCommerce application that I need to resurrect temporarily for a showcase.


Solution

  • sed doesn't recurse on it's own so you'll need to use another tool for that, find is generally the right answer.

    Run this in the top-level directory. sed will make a backup of each file it reads with a .bak extension (regardless if it actually does a replacement). If you don't want the backup behavior, use -i instead of -i.bak

    I recommend you first try this on a test directory to make sure it meets expectations.

    #!/bin/bash
    
    while IFS= read -r -d $'\0' file; do
       sed -i.bak $'s/$PHP_SELF/$_SERVER[\'PHP_SELF\']/g' "$file"
    done < <(find . -type f -name "*.php" -print0)