You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

docker-php-ext-enable 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #!/bin/sh
  2. set -e
  3. cd "$(php -r 'echo ini_get("extension_dir");')"
  4. usage() {
  5. echo "usage: $0 [options] module-name [module-name ...]"
  6. echo " ie: $0 gd mysqli"
  7. echo " $0 pdo pdo_mysql"
  8. echo " $0 --ini-name 0-apc.ini apcu apc"
  9. echo
  10. echo 'Possible values for module-name:'
  11. echo $(find -maxdepth 1 -type f -name '*.so' -exec basename '{}' ';' | sort)
  12. }
  13. opts="$(getopt -o 'h?' --long 'help,ini-name:' -- "$@" || { usage >&2 && false; })"
  14. eval set -- "$opts"
  15. iniName=
  16. while true; do
  17. flag="$1"
  18. shift
  19. case "$flag" in
  20. --help|-h|'-?') usage && exit 0 ;;
  21. --ini-name) iniName="$1" && shift ;;
  22. --) break ;;
  23. *)
  24. {
  25. echo "error: unknown flag: $flag"
  26. usage
  27. } >&2
  28. exit 1
  29. ;;
  30. esac
  31. done
  32. modules=
  33. for module; do
  34. if [ -z "$module" ]; then
  35. continue
  36. fi
  37. if [ -f "$module.so" ] && ! [ -f "$module" ]; then
  38. # allow ".so" to be optional
  39. module="$module.so"
  40. fi
  41. if ! [ -f "$module" ]; then
  42. echo >&2 "error: $(readlink -f "$module") does not exist"
  43. echo >&2
  44. usage >&2
  45. exit 1
  46. fi
  47. modules="$modules $module"
  48. done
  49. if [ -z "$modules" ]; then
  50. usage >&2
  51. exit 1
  52. fi
  53. for module in $modules; do
  54. if nm -g "$module" | grep -q ' zend_extension_entry$'; then
  55. # https://wiki.php.net/internals/extensions#loading_zend_extensions
  56. line="zend_extension=$(readlink -f "$module")"
  57. else
  58. line="extension=$module"
  59. fi
  60. ext="$(basename "$module")"
  61. ext="${ext%.*}"
  62. if php -r 'exit(extension_loaded("'"$ext"'") ? 0 : 1);'; then
  63. # this isn't perfect, but it's better than nothing
  64. # (for example, 'opcache.so' presents inside PHP as 'Zend OPcache', not 'opcache')
  65. echo >&2
  66. echo >&2 "warning: $ext ($module) is already loaded!"
  67. echo >&2
  68. continue
  69. fi
  70. ini="${PHP_INI_DIR}/conf.d/${iniName:-"docker-php-ext-$ext.ini"}"
  71. if ! grep -q "$line" "$ini" 2>/dev/null; then
  72. echo "$line" >> "$ini"
  73. fi
  74. done