mirror of
				https://github.com/shivammathur/setup-php.git
				synced 2025-10-31 15:26:23 +07:00 
			
		
		
		
	Add support for old PHP versions on linux
This commit is contained in:
		| @ -34,8 +34,8 @@ add_extension() { | ||||
|     add_log "$tick" "$extension" "Enabled" | ||||
|   elif ! php -m | grep -i -q -w "$extension"; then | ||||
|     if [[ "$version" =~ $old_versions ]]; then | ||||
|       (eval "$install_command" >/dev/null 2>&1 && echo "$prefix=$ext_dir/$extension.so" >>"$ini_file" && add_log "$tick" "$extension" "Installed and enabled") || | ||||
|       (sudo port install php"$nodot_version"-"$extension" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") || | ||||
|       (eval "$install_command" >/dev/null 2>&1 && echo "$prefix=$ext_dir/$extension.so" >>"$ini_file" && add_log "$tick" "$extension" "Installed and enabled") || | ||||
|       add_log "$cross" "$extension" "Could not install $extension on PHP $semver" | ||||
|     else | ||||
|       (eval "$install_command" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") || | ||||
| @ -102,12 +102,13 @@ add_tool() { | ||||
|     if [ "$status_code" = "200" ]; then | ||||
|       sudo chmod a+x "$tool_path" | ||||
|       if [ "$tool" = "phive" ]; then | ||||
|         add_extension curl >/dev/null 2>&1 | ||||
|         add_extension mbstring >/dev/null 2>&1 | ||||
|         add_extension xml >/dev/null 2>&1 | ||||
|         add_extension curl "sudo pecl install -f curl" extension >/dev/null 2>&1 | ||||
|         add_extension mbstring "sudo pecl install -f mbstring" extension >/dev/null 2>&1 | ||||
|         add_extension xml "sudo pecl install -f xml" extension >/dev/null 2>&1 | ||||
|       elif [ "$tool" = "cs2pr" ]; then | ||||
|         sudo sed -i '' 's/exit(9)/exit(0)/' "$tool_path" | ||||
|         tr -d '\r' < "$tool_path" | sudo tee "$tool_path.tmp" >/dev/null 2>&1 && sudo mv "$tool_path.tmp" "$tool_path" | ||||
|         sudo chmod a+x "$tool_path" | ||||
|       fi | ||||
|       add_log "$tick" "$tool" "Added" | ||||
|     else | ||||
|  | ||||
| @ -1,12 +1,76 @@ | ||||
| php_h="https://raw.githubusercontent.com/php/php-src/PHP-$2/main/php.h" | ||||
| linux_extension_dir() { | ||||
|   apiv=$1 | ||||
|   if [ "$version" = "5.3" ]; then | ||||
|     echo "/home/runner/php/5.3.29/lib/php/extensions/no-debug-non-zts-$apiv" | ||||
|   elif [[ "$version" =~ $old_versions_linux ]]; then | ||||
|     echo "/usr/lib/php5/$apiv" | ||||
|   elif [ "$version" = "8.0" ]; then | ||||
|     echo "/home/runner/php/8.0/lib/php/extensions/no-debug-non-zts-$apiv" | ||||
|   else | ||||
|     echo "/usr/lib/php/$apiv" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| darwin_extension_dir() { | ||||
|   apiv=$1 | ||||
|   if [[ "$version" =~ $old_versions_darwin ]]; then | ||||
|     echo "/opt/local/lib/php${version/./}/extensions/no-debug-non-zts-$apiv" | ||||
|   else | ||||
|     echo "/usr/local/lib/php/pecl/$apiv" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| get_apiv() { | ||||
|   case $version in | ||||
|     5.3) | ||||
|       echo "20090626" | ||||
|       ;; | ||||
|     5.4) | ||||
|       echo "20100525" | ||||
|       ;; | ||||
|     5.5) | ||||
|       echo "20121212" | ||||
|       ;; | ||||
|     5.6) | ||||
|       echo "20131226" | ||||
|       ;; | ||||
|     7.0) | ||||
|       echo "20151012" | ||||
|       ;; | ||||
|     7.1) | ||||
|       echo "20160303" | ||||
|       ;; | ||||
|     7.2) | ||||
|       echo "20170718" | ||||
|       ;; | ||||
|     7.3) | ||||
|       echo "20180731" | ||||
|       ;; | ||||
|     *) | ||||
|       if [ "$version" = "8.0" ]; then | ||||
|         php_h="https://raw.githubusercontent.com/php/php-src/master/main/php.h" | ||||
|       else | ||||
|         semver=$(curl -sSL --retry 5 https://github.com/php/php-src/releases | grep "$flags" "(php-$version.[0-9]+)".zip | head -n 1 | grep "$flags" '[0-9]+\.[0-9]+\.[0-9]+') | ||||
|         php_h="https://raw.githubusercontent.com/php/php-src/PHP-$semver/main/php.h" | ||||
|       fi | ||||
|       curl -sSL --retry 5 "$php_h" | grep "PHP_API_VERSION" | cut -d' ' -f 3 | ||||
|       ;; | ||||
|   esac | ||||
| } | ||||
|  | ||||
| version=$2 | ||||
| old_versions_linux="5.[4-5]" | ||||
| old_versions_darwin="5.[3-5]" | ||||
| os=$(uname -s) | ||||
| if [ "$os" = "Linux" ]; then | ||||
|   apiv=$(curl -sSL --retry 5 "$php_h" | grep "PHP_API_VERSION" | cut -d' ' -f 3) | ||||
|   dir="/usr/lib/php/$apiv" | ||||
|   sudo mkdir -p "$dir" && sudo chown -R "$USER":"$(id -g -n)" /usr/lib/php | ||||
|   flags='-Po' | ||||
|   apiv=$(get_apiv) | ||||
|   dir=$(linux_extension_dir "$apiv") | ||||
|   sudo mkdir -p "$dir" && sudo chown -R "$USER":"$(id -g -n)" $(dirname "$dir") | ||||
| elif [ "$os" = "Darwin" ]; then | ||||
|   apiv=$(curl -sSL --retry 5 "$php_h" | grep "PHP_API_VERSION" | cut -d' ' -f 3) | ||||
|   dir="/usr/local/lib/php/pecl/$apiv" | ||||
|   flags='-Eo' | ||||
|   apiv=$(get_apiv) | ||||
|   dir=$(darwin_extension_dir "$apiv") | ||||
| else | ||||
|   dir='C:\\tools\\php\\ext' | ||||
| fi | ||||
|  | ||||
| @ -19,8 +19,13 @@ add_log() { | ||||
| # Function to update php ppa | ||||
| update_ppa() { | ||||
|   if [ "$ppa_updated" = "false" ]; then | ||||
|     find /etc/apt/sources.list.d -type f -name 'ondrej-ubuntu-php*.list' -exec sudo DEBIAN_FRONTEND=noninteractive apt-fast update -o Dir::Etc::sourcelist="{}" ';' >/dev/null 2>&1 | ||||
|     ppa_updated="true" | ||||
|     if [[ "$version" =~ $old_versions ]]; then | ||||
|       ppa="dotdeb-ubuntu-php*.list" | ||||
|     else | ||||
|       ppa="ondrej-ubuntu-php*.list" | ||||
|     fi | ||||
|     find /etc/apt/sources.list.d -type f -name "$ppa" -exec sudo DEBIAN_FRONTEND=noninteractive apt-fast update -o Dir::Etc::sourcelist="{}" ';' >/dev/null 2>&1 | ||||
|     echo "true" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| @ -53,15 +58,18 @@ add_extension() { | ||||
|   extension=$1 | ||||
|   install_command=$2 | ||||
|   prefix=$3 | ||||
|   if [[ "$version" =~ $old_versions ]]; then | ||||
|     install_command="ppa_updated=$(update_ppa) && ${install_command/5\.[4-5]-$extension/5-$extension=$release_version}" | ||||
|   fi | ||||
|   if ! php -m | grep -i -q -w "$extension" && [ -e "$ext_dir/$extension.so" ]; then | ||||
|     # shellcheck disable=SC2046 | ||||
|     $apt_install $(apt-cache depends php"$version"-"$extension" | awk '/Depends:/{print$2}') >/dev/null 2>&1 | ||||
|     echo "$prefix=$extension" >>"$ini_file" && add_log "$tick" "$extension" "Enabled" | ||||
|     $apt_install $(apt-cache depends php"$version"-"$extension" 2>/dev/null | awk '/Depends:/{print$2}') >/dev/null 2>&1 | ||||
|     echo "$prefix=$extension.so" >>"$ini_file" && add_log "$tick" "$extension" "Enabled" | ||||
|   elif php -m | grep -i -q -w "$extension"; then | ||||
|     add_log "$tick" "$extension" "Enabled" | ||||
|   elif ! php -m | grep -i -q -w "$extension"; then | ||||
|     (eval "$install_command" && add_log "$tick" "$extension" "Installed and enabled") || | ||||
|     (update_ppa && eval "$install_command" && add_log "$tick" "$extension" "Installed and enabled") || | ||||
|     (eval "$install_command" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") || | ||||
|     (ppa_updated=$(update_ppa) && eval "$install_command" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") || | ||||
|     (sudo pecl install -f "$extension" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") || | ||||
|     add_log "$cross" "$extension" "Could not install $extension on PHP $semver" | ||||
|   fi | ||||
| @ -72,7 +80,7 @@ add_extension() { | ||||
| delete_extension() { | ||||
|   extension=$1 | ||||
|   sudo sed -i "/$extension/d" "$ini_file" | ||||
|   sudo rm -rf /etc/php/"$version"/cli/conf.d/*"$extension"* >/dev/null 2>&1 | ||||
|   sudo rm -rf "$scan_dir"/*"$extension"* >/dev/null 2>&1 | ||||
|   sudo rm -rf "$ext_dir"/"$extension".so >/dev/null 2>&1 | ||||
| } | ||||
|  | ||||
| @ -103,7 +111,7 @@ add_unstable_extension() { | ||||
|   if ! php -m | grep -i -q -w "$extension" && [ -e "$ext_dir/$extension.so" ]; then | ||||
|     extension_version=$(php -d="$prefix=$extension" -r "echo phpversion('$extension');") | ||||
|     if [ "$extension_version" = "$pecl_version" ]; then | ||||
|       echo "$prefix=$extension" >>"$ini_file" && add_log "$tick" "$extension" "Enabled" | ||||
|       echo "$prefix=$extension.so" >>"$ini_file" && add_log "$tick" "$extension" "Enabled" | ||||
|     else | ||||
|       delete_extension "$extension" | ||||
|       add_pecl_extension "$extension" "$pecl_version" | ||||
| @ -130,7 +138,7 @@ update_extension() { | ||||
|   if [ "$final_version" != "$current_version"  ]; then | ||||
|     version_exists=$(apt-cache policy -- *"$extension" | grep "$final_version") | ||||
|     if [ -z "$version_exists" ]; then | ||||
|       update_ppa | ||||
|       ppa_updated=$(update_ppa) | ||||
|     fi | ||||
|     $apt_install php"$version"-"$extension" | ||||
|   fi | ||||
| @ -152,9 +160,9 @@ add_tool() { | ||||
|     elif [ "$tool" = "cs2pr" ]; then | ||||
|       sudo sed -i 's/\r$//; s/exit(9)/exit(0)/' "$tool_path" | ||||
|     elif [ "$tool" = "phive" ]; then | ||||
|       add_extension curl >/dev/null 2>&1 | ||||
|       add_extension mbstring >/dev/null 2>&1 | ||||
|       add_extension xml >/dev/null 2>&1 | ||||
|       add_extension curl "$apt_install php$version-curl" extension >/dev/null 2>&1 | ||||
|       add_extension mbstring "$apt_install php$version-mbstring" extension >/dev/null 2>&1 | ||||
|       add_extension xml "$apt_install php$version-xml" extension >/dev/null 2>&1 | ||||
|     fi | ||||
|     add_log "$tick" "$tool" "Added" | ||||
|   else | ||||
| @ -190,13 +198,29 @@ setup_master() { | ||||
|   install_dir=~/php/"$version" | ||||
|   sudo mkdir -m 777 -p ~/php | ||||
|   $apt_install libicu-dev >/dev/null 2>&1 | ||||
|   curl -o "$tar_file" -L https://bintray.com/shivammathur/php/download_file?file_path="$tar_file" >/dev/null 2>&1 | ||||
|   curl -SLO https://dl.bintray.com/shivammathur/php/"$tar_file" >/dev/null 2>&1 | ||||
|   sudo tar xf "$tar_file" -C ~/php >/dev/null 2>&1 | ||||
|   rm -rf "$tar_file" | ||||
|   sudo ln -sf -S "$version" "$install_dir"/bin/* /usr/bin/ | ||||
|   sudo ln -sf "$install_dir"/etc/php.ini /etc/php.ini | ||||
| } | ||||
|  | ||||
| # Function to setup PHP 5.3, PHP 5.4 and PHP 5.5 | ||||
| setup_old_versions() { | ||||
|   ( | ||||
|     cd /tmp || exit | ||||
|     curl -SLO https://dl.bintray.com/shivammathur/php/php-"$version".tar.xz >/dev/null 2>&1 | ||||
|     sudo tar xf php-"$version".tar.xz >/dev/null 2>&1 | ||||
|     cd php-"$version" || exit | ||||
|     sudo chmod a+x ./*.sh | ||||
|     ./install.sh >/dev/null 2>&1 | ||||
|     ./post-install.sh >/dev/null 2>&1 | ||||
|   ) | ||||
|   sudo rm -rf /tmp/php-"$version" | ||||
|   configure_pecl | ||||
|   release_version=$(php -v | head -n 1 | cut -d' ' -f 2) | ||||
| } | ||||
|  | ||||
| # Function to setup PECL | ||||
| add_pecl() { | ||||
|   add_devtools | ||||
| @ -222,20 +246,25 @@ cross="✗" | ||||
| ppa_updated="false" | ||||
| pecl_config="false" | ||||
| version=$1 | ||||
| old_versions="5.[4-5]" | ||||
| apt_install="sudo DEBIAN_FRONTEND=noninteractive apt-fast install -y" | ||||
| existing_version=$(php-config --version | cut -c 1-3) | ||||
|  | ||||
| # Setup PHP | ||||
| step_log "Setup PHP" | ||||
| sudo mkdir -p /var/run | ||||
| sudo mkdir -p /run/php | ||||
| sudo mkdir -p /var/run /run/php | ||||
|  | ||||
| if [ "$existing_version" != "$version" ]; then | ||||
|   if [ ! -e "/usr/bin/php$version" ]; then | ||||
|     update_ppa | ||||
|     if [ "$version" = "8.0" ]; then | ||||
|       setup_master | ||||
|     elif [[ "$version" =~ $old_versions ]] || [ "$version" = "5.3" ]; then | ||||
|       setup_old_versions | ||||
|     else | ||||
|       version_exists=$(apt-cache policy -- php"$version" | grep "$version") | ||||
|       if [ -z "$version_exists" ]; then | ||||
|         ppa_updated=$(update_ppa) | ||||
|       fi | ||||
|       $apt_install php"$version" php"$version"-curl php"$version"-mbstring php"$version"-xml >/dev/null 2>&1 | ||||
|     fi | ||||
|     status="installed" | ||||
| @ -243,7 +272,9 @@ if [ "$existing_version" != "$version" ]; then | ||||
|     status="switched" | ||||
|   fi | ||||
|  | ||||
|   switch_version | ||||
|   if [ "$version" != "5.3" ]; then | ||||
|     switch_version | ||||
|   fi | ||||
|  | ||||
|   if [ "$version" = "8.0" ]; then | ||||
|     semver=$(php -v | head -n 1 | cut -f 2 -d ' ') | ||||
| @ -262,6 +293,7 @@ else | ||||
| fi | ||||
|  | ||||
| ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g") | ||||
| ext_dir=$(php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||") | ||||
| ext_dir=$(php -i | grep "extension_dir => /" | sed -e "s|.*=> s*||") | ||||
| scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||") | ||||
| sudo chmod 777 "$ini_file" | ||||
| add_log "$tick" "PHP" "$status" | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Shivam Mathur
					Shivam Mathur