Php
PHP 編譯問題 - 卡在“生成 phar.phar”
我在一個“有點自定義”的 Centos 6/cPanel 伺服器上從原始碼編譯 PHP 時遇到了問題。一般來說它過去可以工作,現在不行。在此框中編譯了許多不同的 PHP,並且沒有更大的問題。現在,任何版本的 PHP 都停留在:
'Generating phar.phar'.
一些輸出:
Prerequisite `/root/php-7.0.13/ext/phar/phar/phar.inc' is older than target `ext/phar/phar/phar.inc'. No need to remake target `ext/phar/phar/phar.inc'. Pruning file `/root/php-7.0.13/ext/phar/phar/clicommand.inc'. Pruning file `/root/php-7.0.13/ext/phar/phar/directorygraphiterator.inc'. Pruning file `/root/php-7.0.13/ext/phar/phar/directorytreeiterator.inc'. Pruning file `/root/php-7.0.13/ext/phar/phar/invertedregexiterator.inc'. Pruning file `/root/php-7.0.13/ext/phar/phar/pharcommand.inc'. Pruning file `/root/php-7.0.13/ext/phar/phar/phar.inc'. Pruning file `/root/php-7.0.13/ext/phar/phar/phar.php'. Pruning file `sapi/cli/php'. Finished prerequisites of target file ext/phar/phar.phar'. Must remake target ext/phar/phar.phar'. Putting child 0x022ef310 (ext/phar/phar.phar) PID 22348 on the chain. Live child 0x022ef310 (ext/phar/phar.phar) PID 22348 Generating phar.phar Reaping winning child 0x022ef310 PID 22348 Live child 0x022ef310 (ext/phar/phar.phar) PID 22349 Reaping winning child 0x022ef310 PID 22349 Live child 0x022ef310 (ext/phar/phar.phar) PID 22350 Reaping winning child 0x022ef310 PID 22350 Live child 0x022ef310 (ext/phar/phar.phar) PID 22351
我試過make’ing,只有1個執行緒,但沒有幫助。
在“乾淨”之後:
Considering target file `/root/php-7.0.13/ext/phar/phar/phar.inc'. File `/root/php-7.0.13/ext/phar/phar/phar.inc' was considered already. Considering target file `/root/php-7.0.13/ext/phar/phar/phar.php'. File `/root/php-7.0.13/ext/phar/phar/phar.php' was considered already. Considering target file `sapi/cli/php'. File `sapi/cli/php' was considered already. Finished prerequisites of target file `ext/phar/phar.phar'. Must remake target `ext/phar/phar.phar'. Need a job token; we don't have children Putting child 0x00d53610 (ext/phar/phar.phar) PID 17444 on the chain. Commands of `ext/phar/phar.phar' are being run. Finished prerequisites of target file `pharcmd'. The prerequisites of `pharcmd' are being made. Finished prerequisites of target file `all'. The prerequisites of `all' are being made. Live child 0x00d53610 (ext/phar/phar.phar) PID 17444 Generating phar.phar Reaping winning child 0x00d53610 PID 17444 Live child 0x00d53610 (ext/phar/phar.phar) PID 17445 Reaping winning child 0x00d53610 PID 17445 Live child 0x00d53610 (ext/phar/phar.phar) PID 17446 Reaping winning child 0x00d53610 PID 17446 Live child 0x00d53610 (ext/phar/phar.phar) PID 17447
我嘗試使用 make-4.2 而不是預設的 make-3.81,但它沒有任何改變。
一些 strace 輸出:
stat("/root/php-7.0.13/ext/phar/phar/phar.php", {st_mode=S_IFREG|0755,,st_size=992, ...}) = 0 stat("ext/phar/phar.phar", 0x7ffc5f1a4930) = -1 ENOENT (No such file or directory) stat("ext/phar/phar/phar.inc", {st_mode=S_IFREG|0644, st_size=790, ...}) = 0 wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 16875 rt_sigprocmask(SIG_BLOCK, [HUP INT QUIT TERM XCPU XFSZ], NULL, 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 stat("/root/php-7.0.13/ext/json/json_scanner.c", {st_mode=S_IFREG|0644, st_size=29634, ...}) = 0 rt_sigprocmask(SIG_BLOCK, [HUP INT QUIT TERM XCPU XFSZ], NULL, 8) = 0 fcntl(3, F_SETFD, FD_CLOEXEC) = 0 fcntl(4, F_SETFD, FD_CLOEXEC) = 0 vfork() = 16877 fcntl(3, F_GETFD) = 0x1 (flags FD_CLOEXEC) fcntl(3, F_SETFD, 0) = 0 fcntl(4, F_GETFD) = 0x1 (flags FD_CLOEXEC) fcntl(4, F_SETFD, 0) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 wait4(-1, Generating phar.phar [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 16877 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=16877, si_status=0, si_utime=0, si_stime=0} --- rt_sigreturn() = 16877 rt_sigprocmask(SIG_BLOCK, [HUP INT QUIT TERM XCPU XFSZ], NULL, 8) = 0 fcntl(3, F_SETFD, FD_CLOEXEC) = 0 fcntl(4, F_SETFD, FD_CLOEXEC) = 0 vfork() = 16878 fcntl(3, F_GETFD) = 0x1 (flags FD_CLOEXEC) fcntl(3, F_SETFD, 0) = 0 fcntl(4, F_GETFD) = 0x1 (flags FD_CLOEXEC) fcntl(4, F_SETFD, 0) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 16878 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=16878,si_status=0, si_utime=0, si_stime=0} --- rt_sigreturn() = 16878 rt_sigprocmask(SIG_BLOCK, [HUP INT QUIT TERM XCPU XFSZ], NULL, 8) = 0 fcntl(3, F_SETFD, FD_CLOEXEC) = 0 fcntl(4, F_SETFD, FD_CLOEXEC) = 0 vfork() = 16879 fcntl(3, F_GETFD) = 0x1 (flags FD_CLOEXEC) fcntl(3, F_SETFD, 0) = 0 fcntl(4, F_GETFD) = 0x1 (flags FD_CLOEXEC) fcntl(4, F_SETFD, 0) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 16879 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=16879, si_status=0, si_utime=0, si_stime=0} --- rt_sigreturn() = 16879 rt_sigprocmask(SIG_BLOCK, [HUP INT QUIT TERM XCPU XFSZ], NULL, 8) = 0 fcntl(3, F_SETFD, FD_CLOEXEC) = 0 fcntl(4, F_SETFD, FD_CLOEXEC) = 0 vfork() = 16880 fcntl(3, F_GETFD) = 0x1 (flags FD_CLOEXEC) fcntl(3, F_SETFD, 0) = 0 fcntl(4, F_GETFD) = 0x1 (flags FD_CLOEXEC) fcntl(4, F_SETFD, 0) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 wait4(-1,
找到了解決方案,現在看起來很簡單,可惜我之前沒有找到它。在對子程序進行 strace 之後,它顯示它正在使用另一個損壞的 PHP 建構的 phar 作曲家 - 由於庫依賴錯誤,這個子程序被掛起,所以這就是有問題的程序正在等待的原因。在指向正確的二進製文件後,它起作用了。