重建PHP 7以添加ODBC扩展MACOS 10.13(高sierra)时的错误:Makefile不如预期



我目前正在努力处理ODBC问题。我需要使用ODBC与FileMaker数据库连接。

我已经使用MacOS High Sierra Apache MySQL PHP7设置了VM,并且我已经安装了ODBC Manager(来自MATTERTECH( FILEMAKER ODBC驱动程序。

我的Web-App是MacOS 10.8上托管的先前项目的副本。在MacOS 10.8上一切都很好。但是在新的高级塞拉山脉上,我得到了这个错误

致电未定义的函数odbc_connect((

我正在使用CodeIgniter作为PHP框架,但是我认为错误可能与PHP版本有关,因为PHP看起来不识别此方法是其自己的。

我已经在PHP官方网站上阅读了ODBC_Connect与PHP V7完全兼容。

即使我无法弄清楚为什么会遇到此错误。

它是否与新的MacOS版本有关(似乎已经在较早的OSX上删除了ODBC支持,您可以在此处阅读(?

(

加上,我发现了一些建议从Source重新构建PHP的文章,并手动添加此ODBC支持。我应该这样去吗?我不确定我可以使用此解决方案。

update(我正在从源重建PHP(

我将电子邮件发送给Acutaltech支持,他们建议我在此处遵循说明http://www.iodbc.org/dataspace/doc/iodbc/iodbc/wiki/iodbcwiki/iodbcwiki/iodbcphphphowtomacosx。因此,我试图自己编译和建立PHP,但我的Makefile不包含有关ODBC的任何内容。

这是我的makefile

mkinstalldirs = $(top_srcdir)/build/shtool mkdir -p
INSTALL = $(top_srcdir)/build/shtool install -c
INSTALL_DATA = $(INSTALL) -m 644
DEFS = -DPHP_ATOM_INC -I$(top_builddir)/include -I$(top_builddir)/main -I$(top_srcdir)
COMMON_FLAGS = $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS) $(PHP_FRAMEWORKPATH)
all: $(all_targets)
    @echo
    @echo "Build complete."
    @echo "Don't forget to run 'make test'."
    @echo
build-modules: $(PHP_MODULES) $(PHP_ZEND_EX)
build-binaries: $(PHP_BINARIES)
libphp$(PHP_MAJOR_VERSION).la: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
    $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -rpath $(phptempdir) $(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS) $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@
    -@$(LIBTOOL) --silent --mode=install cp $@ $(phptempdir)/$@ >/dev/null 2>&1
libs/libphp$(PHP_MAJOR_VERSION).bundle: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
    $(CC) $(MH_BUNDLE_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(PHP_GLOBAL_OBJS:.lo=.o) $(PHP_SAPI_OBJS:.lo=.o) $(PHP_FRAMEWORKS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@ && cp $@ libs/libphp$(PHP_MAJOR_VERSION).so
install: $(all_targets) $(install_targets)
install-sapi: $(OVERALL_TARGET)
    @echo "Installing PHP SAPI module:       $(PHP_SAPI)"
    -@$(mkinstalldirs) $(INSTALL_ROOT)$(bindir)
    -@if test ! -r $(phptempdir)/libphp$(PHP_MAJOR_VERSION).$(SHLIB_DL_SUFFIX_NAME); then 
        for i in 0.0.0 0.0 0; do 
            if test -r $(phptempdir)/libphp$(PHP_MAJOR_VERSION).$(SHLIB_DL_SUFFIX_NAME).$$i; then 
                $(LN_S) $(phptempdir)/libphp$(PHP_MAJOR_VERSION).$(SHLIB_DL_SUFFIX_NAME).$$i $(phptempdir)/libphp$(PHP_MAJOR_VERSION).$(SHLIB_DL_SUFFIX_NAME); 
                break; 
            fi; 
        done; 
    fi
    @$(INSTALL_IT)
install-binaries: build-binaries $(install_binary_targets)
install-modules: build-modules
    @test -d modules && 
    $(mkinstalldirs) $(INSTALL_ROOT)$(EXTENSION_DIR)
    @echo "Installing shared extensions:     $(INSTALL_ROOT)$(EXTENSION_DIR)/"
    @rm -f modules/*.la >/dev/null 2>&1
    @$(INSTALL) modules/* $(INSTALL_ROOT)$(EXTENSION_DIR)
install-headers:
    -@if test "$(INSTALL_HEADERS)"; then 
        for i in `echo $(INSTALL_HEADERS)`; do 
            i=`$(top_srcdir)/build/shtool path -d $$i`; 
            paths="$$paths $(INSTALL_ROOT)$(phpincludedir)/$$i"; 
        done; 
        $(mkinstalldirs) $$paths && 
        echo "Installing header files:          $(INSTALL_ROOT)$(phpincludedir)/" && 
        for i in `echo $(INSTALL_HEADERS)`; do 
            if test "$(PHP_PECL_EXTENSION)"; then 
                src=`echo $$i | $(SED) -e "s#ext/$(PHP_PECL_EXTENSION)/##g"`; 
            else 
                src=$$i; 
            fi; 
            if test -f "$(top_srcdir)/$$src"; then 
                $(INSTALL_DATA) $(top_srcdir)/$$src $(INSTALL_ROOT)$(phpincludedir)/$$i; 
            elif test -f "$(top_builddir)/$$src"; then 
                $(INSTALL_DATA) $(top_builddir)/$$src $(INSTALL_ROOT)$(phpincludedir)/$$i; 
            else 
                (cd $(top_srcdir)/$$src && $(INSTALL_DATA) *.h $(INSTALL_ROOT)$(phpincludedir)/$$i; 
                cd $(top_builddir)/$$src && $(INSTALL_DATA) *.h $(INSTALL_ROOT)$(phpincludedir)/$$i) 2>/dev/null || true; 
            fi 
        done; 
    fi
PHP_TEST_SETTINGS = -d 'open_basedir=' -d 'output_buffering=0' -d 'memory_limit=-1'
PHP_TEST_SHARED_EXTENSIONS =  ` 
    if test "x$(PHP_MODULES)" != "x"; then 
        for i in $(PHP_MODULES)""; do 
            . $$i; $(top_srcdir)/build/shtool echo -n -- " -d extension=$$dlname"; 
        done; 
    fi; 
    if test "x$(PHP_ZEND_EX)" != "x"; then 
        for i in $(PHP_ZEND_EX)""; do 
            . $$i; $(top_srcdir)/build/shtool echo -n -- " -d $(ZEND_EXT_TYPE)=$(top_builddir)/modules/$$dlname"; 
        done; 
    fi`
PHP_DEPRECATED_DIRECTIVES_REGEX = '^(magic_quotes_(gpc|runtime|sybase)?|(zend_)?extension(_debug)?(_ts)?)[t ]*='
test: all
    @if test ! -z "$(PHP_EXECUTABLE)" && test -x "$(PHP_EXECUTABLE)"; then 
        INI_FILE=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r 'echo php_ini_loaded_file();' 2> /dev/null`; 
        if test "$$INI_FILE"; then 
            $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_FILE" > $(top_builddir)/tmp-php.ini; 
        else 
            echo > $(top_builddir)/tmp-php.ini; 
        fi; 
        INI_SCANNED_PATH=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r '$$a = explode(",n", trim(php_ini_scanned_files())); echo $$a[0];' 2> /dev/null`; 
        if test "$$INI_SCANNED_PATH"; then 
            INI_SCANNED_PATH=`$(top_srcdir)/build/shtool path -d $$INI_SCANNED_PATH`; 
            $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_SCANNED_PATH"/*.ini >> $(top_builddir)/tmp-php.ini; 
        fi; 
        TEST_PHP_EXECUTABLE=$(PHP_EXECUTABLE) 
        TEST_PHP_SRCDIR=$(top_srcdir) 
        CC="$(CC)" 
            $(PHP_EXECUTABLE) -n -c $(top_builddir)/tmp-php.ini $(PHP_TEST_SETTINGS) $(top_srcdir)/run-tests.php -n -c $(top_builddir)/tmp-php.ini -d extension_dir=$(top_builddir)/modules/ $(PHP_TEST_SHARED_EXTENSIONS) $(TESTS); 
        TEST_RESULT_EXIT_CODE=$$?; 
        rm $(top_builddir)/tmp-php.ini; 
        exit $$TEST_RESULT_EXIT_CODE; 
    else 
        echo "ERROR: Cannot run tests without CLI sapi."; 
    fi
clean:
    find . -name *.gcno -o -name *.gcda | xargs rm -f
    find . -name *.lo -o -name *.o | xargs rm -f
    find . -name *.la -o -name *.a | xargs rm -f
    find . -name *.so | xargs rm -f
    find . -name .libs -a -type d|xargs rm -rf
    rm -f libphp$(PHP_MAJOR_VERSION).la $(SAPI_CLI_PATH) $(SAPI_CGI_PATH) $(SAPI_MILTER_PATH) $(SAPI_LITESPEED_PATH) $(SAPI_FPM_PATH) $(OVERALL_TARGET) modules/* libs/*
distclean: clean
    rm -f Makefile config.cache config.log config.status Makefile.objects Makefile.fragments libtool main/php_config.h main/internal_functions_cli.c main/internal_functions.c stamp-h buildmk.stamp Zend/zend_dtrace_gen.h Zend/zend_dtrace_gen.h.bak Zend/zend_config.h TSRM/tsrm_config.h
    rm -f php7.spec main/build-defs.h scripts/phpize
    rm -f ext/date/lib/timelib_config.h ext/mbstring/oniguruma/config.h ext/mbstring/libmbfl/config.h ext/oci8/oci8_dtrace_gen.h ext/oci8/oci8_dtrace_gen.h.bak
    rm -f scripts/man1/phpize.1 scripts/php-config scripts/man1/php-config.1 sapi/cli/php.1 sapi/cgi/php-cgi.1 ext/phar/phar.1 ext/phar/phar.phar.1
    rm -f sapi/fpm/php-fpm.conf sapi/fpm/init.d.php-fpm sapi/fpm/php-fpm.service sapi/fpm/php-fpm.8 sapi/fpm/status.html
    rm -f ext/iconv/php_have_bsd_iconv.h ext/iconv/php_have_glibc_iconv.h ext/iconv/php_have_ibm_iconv.h ext/iconv/php_have_iconv.h ext/iconv/php_have_libiconv.h ext/iconv/php_iconv_aliased_libiconv.h ext/iconv/php_iconv_supports_errno.h ext/iconv/php_php_iconv_h_path.h ext/iconv/php_php_iconv_impl.h
    rm -f ext/phar/phar.phar ext/phar/phar.php
    if test "$(srcdir)" != "$(builddir)"; then 
      rm -f ext/phar/phar/phar.inc; 
    fi
    $(EGREP) define'.*include/php' $(top_srcdir)/configure | $(SED) 's/.*>//'|xargs rm -f
prof-gen:
    CCACHE_DISABLE=1 $(MAKE) PROF_FLAGS=-fprofile-generate all
prof-clean:
    find . -name *.lo -o -name *.o | xargs rm -f
    find . -name *.la -o -name *.a | xargs rm -f
    find . -name *.so | xargs rm -f
    rm -f libphp$(PHP_MAJOR_VERSION).la $(SAPI_CLI_PATH) $(SAPI_CGI_PATH) $(SAPI_MILTER_PATH) $(SAPI_LITESPEED_PATH) $(SAPI_FPM_PATH) $(OVERALL_TARGET) modules/* libs/*
prof-use:
    CCACHE_DISABLE=1 $(MAKE) PROF_FLAGS=-fprofile-use all

.PHONY: all clean install distclean test prof-gen prof-clean prof-use
.NOEXPORT:

现在我真的很困惑。如何将ODBC扩展名添加到我的PHP构建中?

更新2(我如何解决此问题(

我无法使用ODBC构建自己的PHP版本。对于我使用PHP-OSX解决的每个问题,这基本上是一个自定义的PHP版本,并使用已经构建的所有扩展程序进行了定制。您可以在此处下载二进制文件https://php-osx.liip.ch。

希望这会有所帮助!

已解决

我无法使用ODBC构建自己的PHP版本。对于我使用PHP-OSX解决的每个问题,这基本上是一个自定义的PHP版本,并使用已经构建的所有扩展程序进行了定制。您可以在此处下载二进制文件https://php-osx.liip.ch。

希望这会有所帮助!

最新更新