0

首先,我应该说我已经在整个互联网上搜索了这个问题,但我还没有找到任何解决方案。

我有一台 Mac mini PowerPC (PPC),我用 PHP (5.4.0) 运行 Apache 网络服务器 (httpd-2.2.22),我自己完成所有配置和编译工作。

如果配置:
'./configure' '--prefix=/usr/local/php5' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--sysconfdir= /etc' '--with-config-file-path=/etc' '--with-zlib' '--with-zlib-dir=/usr' '--with-openssl=/usr' '--without -iconv' '--enable-exif' '--enable-ftp' '--enable-mbstring' '--enable-mbregex' '--enable-sockets' '--with-mysql=/usr/local/ mysql' '--with-pdo-mysql=/usr/local/mysql' '--with-mysqli=/usr/local/mysql/bin/mysql_config' '--with-apxs2=/usr/local/apache2/ bin/apxs''--with-mcrypt'

然后 PHP 完美运行。但是,如果我通过将这些添加到上面的脚本中来添加 GD 模块:

'--with-gd' '--with-jpeg-dir=/usr/local/lib' '--with-freetype-dir=/usr/X11R6' '--with-png-dir=/usr/X11R6 ' '--with-xpm-dir=/usr/X11R6'

PHP 配置和编译没有任何错误,但是当我请求调用 PHP 模块的页面时,它会导致 EXC_BREAKPOINT (SIGTRAP)(请参阅下面的 Crash Reporter 日志)。

很明显,与 GD 模块相关的东西导致了这种情况,可能是 FreeType 模块,因为它存在于日志中,但它当然可能不确定。

当 PHP 崩溃(或更准确地说,httpd)时,CPU 会在 10 到 15 秒内达到 100%,直到它恢复。

我需要使用 GD 模块并保留 Mac mini PowerPC。那么,我应该怎么做才能解决这个问题呢?

进程:httpd [79852]
路径:/usr/local/apache2/bin/httpd
标识符:httpd
版本: ???(???)
代码类型:PPC(本机)
父进程:httpd [79846]

日期/时间:2013-11-04 15:44:28.444 +0200
操作系统版本:Mac OS X 10.5.8 (9L31a)
报告版本:6
匿名 UUID:0178B7F8-2241-43F7-A651-9E7234D41A37

异常类型:EXC_BREAKPOINT (SIGTRAP)
异常代码:0x0000000000000001、0x0000000093c11e0c
崩溃的线程:0

应用特定信息:
*** 单线程进程分叉 ***

线程 0 崩溃:
0 com.apple.CoreFoundation 0x93c11e0c __CFRunLoopF​​indMode + 328
1 com.apple.CoreFoundation 0x93c13d88 CFRunLoopAddSource + 276
2 com.apple.DiskArbitration 0x901a6e8c DAApprovalSessionScheduleWithRunLoop + 52
3 ...ple.CoreServices.CarbonCore 0x9512e67c _FSGetDiskArbSession(__DASession**, __DAApprovalSession**) + 540
4 ...ple.CoreServices.CarbonCore 0x9512e420 CreateDiskArbDiskForMountPath(char const*) + 84
5 ...ple.CoreServices.CarbonCore 0x9512d2c8 FSCacheableClient_GetVolumeCachedInfo(char const*, statfs const*, CachedVolumeInfo*, __DADisk*, __DADisk**) + 280
6 ...ple.CoreServices.CarbonCore 0x9512cca4 MountVolume(char const*, statfs*, unsigned char, unsigned char, __DADisk*, short*) + 352
7 ...ple.CoreServices.CarbonCore 0x9512ca48 MountInitialVolumes() + 172
8 ...ple.CoreServices.CarbonCore 0x9512c4d4 INIT_FileManager() + 164
9 ...ple.CoreServices.CarbonCore 0x9512c390 GetRetainedVolFSVCBByVolumeID(unsigned long) + 48
10 ...ple.CoreServices.CarbonCore 0x9512adf4 PathGetObjectInfo(char const*, unsigned long, unsigned long, VolumeInfo**, unsigned long*, unsigned long*, char*, unsigned long*, unsigned char*) + 184
11 ...ple.CoreServices.CarbonCore 0x9512acc4 FSPathMakeRefInternal(unsigned char const*, unsigned long, unsigned long, FSRef*, unsigned char*) + 64
12 libfreetype.6.dylib 0x0070a0fc FT_New_Face_From_Resource + 56
13 libfreetype.6.dylib 0x0070a3b0 FT_New_Face + 48
14 libphp5.so 0x0118d1a8 fontFetch + 824
15 libphp5.so 0x0118edac php_gd_gdCacheGet + 220
16 libphp5.so 0x0118d6d8 php_gd_gdImageStringFTEx + 360
17 libphp5.so 0x011763c0 php_imagettftext_common + 1504
18 libphp5.so 0x01176494 zif_imagefttext + 20
19 libphp5.so 0x014b9c68 zend_do_fcall_common_helper_SPEC + 1048
20 libphp5.so 0x01452898 _ZEND_DO_FCALL_SPEC_CONST_HANDLER + 440
21 libphp5.so 0x014ba878 执行 + 776
22 libphp5.so 0x013f190c zend_execute_scripts + 316
23 libphp5.so 0x013779f4 php_execute_script + 596
24 libphp5.so 0x014bbe64 php_handler + 1972
25 httpd 0x000020c0 ap_run_handler + 96
26 httpd 0x00006ae0 ap_invoke_handler + 224
27 httpd 0x000305c4 ap_process_request + 116
28 httpd 0x0002c768 ap_process_http_connection + 104
29 httpd 0x00012d30 ap_run_process_connection + 96
30 httpd 0x00012ecc ap_process_connection + 92
31 httpd 0x000373e4 child_main + 1220
32 httpd 0x000376a8 make_child + 296
33 httpd 0x000377e4 startup_children + 100
34 httpd 0x000387d4 ap_mpm_run + 3988
35 httpd 0x0000a320 主要 + 3280
36 httpd 0x000019c0 开始 + 64
4

1 回答 1

0

找到问题的原因和解决方案:正如我所怀疑的,问题的原因是 FreeType,或者更准确地说是它与 Apple.CoreServices.CarbonCore 的关系,解决方案是将 FreeType 与 CarbonCode 解耦,它是如何完成的:

像这样重新配置 FreeType 库:

MACOSX_DEPLOYMENT_TARGET=10.5 CFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -g -Os -pipe" CXXFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -g -Os -pipe" LDFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -bindatload" ./configure --with- fsspec=no --with-fsref=no --with-quickdraw-toolbox=no --with-quickdraw-carbon=no

请注意最后的“否”选项,它们将 FT 与 CC 分离。我不知道前面的 LDFLAGS 和 -bindatload 表达式是否必要,但我按原样放置。

在重新配置和一般的 PHP 重新编译之后,GD 扩展开始完美地工作。

于 2013-11-05T01:44:14.847 回答