Skip to content

Commit ebe6ca8

Browse files
committed
support catalina, anyenv's phpenv.
1 parent 52ad02c commit ebe6ca8

File tree

3 files changed

+217
-13
lines changed

3 files changed

+217
-13
lines changed

README.md

+11-5
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,29 @@
44
55
好きなディレクトリで`apachehere`とタイプすると、そこをDocumentRootとしてApacheが立ち上がります。PHPのbuiltin serverみたいで手軽です。
66

7-
OSX El capitanならcloneしてpathを通すだけでSystemのApacheとPHPを利用した環境が立ち上がります
7+
OSX El capitanやCatalinaならcloneしてpathを通すだけでSystemのApacheとPHPを利用した環境が立ち上がります
88

99
phpenvがインストール済みならば、そちらのphpをつかいます。phpenvのlocal指定も反映されます。mod_phpも使えます(後述)。
1010

1111

1212
## DISCLAIMER
1313

14-
OSX El Capitanでのみテストしていますが、おそらく他でも多少の手直しで動くと思われます。
14+
直近はOSX Catalina + phpenv + brew でのみテストしていますが、おそらく他でも多少の手直しで動くと思われます。
1515

1616
サンプルの`httpd.conf`はあくまで手元での開発用であり、最低限のオプションしかつけていません。Production用としては参考にしないほうが良いでしょう。
1717

1818
## インストール
1919

20-
### El capitanの環境
20+
### macOSの環境
2121

22-
cloneしてpathを通すだけです`phpenv`がなければ、System ApacheとSystem PHPを利用します。
22+
おそらくcloneしてpathを通すだけです`phpenv`がなければ、System ApacheとSystem PHPを利用します。
2323

2424
```
2525
$ git clone https://github.com/uzulla/apachehere.git
2626
# `apachehere/bin`にpathを通すか、pathの通った所にapachehereをsymlinkする
2727
```
2828

29-
System Apacheを使わない場合や、`httpd.conf`を修正したい場合は次を参照
29+
System Apacheを使わない場合や、`httpd.conf`を修正したい場合は以降を参照
3030

3131
### それ以外の環境、あるいは野良ビルドしたApacheを使う場合
3232

@@ -100,3 +100,9 @@ Usage: apachehere [-t document_root]
100100

101101
`libphp5.so``libphp7.so`の作り方は「libphp7.so phpenv ビルド」とかでググるとよいでしょう。
102102

103+
あるいは、homebrewでいれたものをphpenv管理下におけばそれでも動作します。
104+
105+
```
106+
$ ln -s /usr/local/Cellar/php/7.4.5_1/ ~/.phpenv/versions/7.4.5
107+
$ phpenv local 7.4.5
108+
```

bin/apachehere

+15-8
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ usage_exit() {
77
echo "[-p port_num] : default 8080 " 1>&2
88
echo "[-c /path/to/php.ini]" 1>&2
99
echo "[-s /path/to/php/conf.d]" 1>&2
10-
exit
10+
exit
1111
}
1212
# ポート1024以下を指定する場合は本スクリプトをsudoで実行する
1313
# phpenvのmod_phpを使う場合には、libphp7.soなどをphpenv/versions/x.x.x/libexec/の中に設置してあればそちらを優先し、存在しなければphp-cgiを使う
@@ -100,19 +100,26 @@ fi
100100
cd ${OLD_CWD}
101101

102102
if [ "${PHPENV_VER}" != "" ]; then
103-
PHP_BASE_DIR="/Users/${ORIG_USER}/.phpenv/versions/${PHPENV_VER}"
104-
103+
PHP_BIN_DIR=`which php` # XXX phpenvとanyenv両方サポートするには…
104+
PHP_BASE_DIR=`dirname $PHP_BIN_DIR` # XXX
105+
PHP_BASE_DIR=`dirname $PHP_BASE_DIR` # XXX
106+
PHP_BASE_DIR="${PHP_BASE_DIR}/versions/${PHPENV_VER}" # XXX
107+
echo $PHP_BASE_DIR
105108
# mod_phpのso、あるいはphp-cgiのpathを獲得する
106-
if [ -r "${PHP_BASE_DIR}/libexec/libphp7.so" ]; then
109+
if [ -r "${PHP_BASE_DIR}/libexec/libphp7.so" ]; then # normal phpenv
107110
USE_MOD_PHP_ARG="-DUSE_MOD_PHP"
108111
APACHE_PHP_MODULE_PATH="${PHP_BASE_DIR}/libexec/libphp7.so"
109112
MOD_PHP_VERSION="7"
113+
elif [ -r "${PHP_BASE_DIR}/lib/httpd/modules/libphp7.so" ]; then # phpenv+homebrew php
114+
USE_MOD_PHP_ARG="-DUSE_MOD_PHP"
115+
APACHE_PHP_MODULE_PATH="${PHP_BASE_DIR}/lib/httpd/modules/libphp7.so"
116+
MOD_PHP_VERSION="7"
110117
elif [ -r "${PHP_BASE_DIR}/libexec/libphp5.so" ]; then
111118
USE_MOD_PHP_ARG="-DUSE_MOD_PHP"
112119
APACHE_PHP_MODULE_PATH="${PHP_BASE_DIR}/libexec/libphp5.so"
113120
MOD_PHP_VERSION="5"
114121
else
115-
APACHE_PHP_CGI_CONTAIN_DIR_PATH="${PHP_BASE_DIR}/bin/"
122+
APACHE_PHP_CGI_CONTAIN_DIR_PATH="${PHP_BASE_DIR}/"
116123
fi
117124

118125
USE_PHP="-DUSE_PHP"
@@ -126,7 +133,7 @@ if [ -r "/usr/bin/sw_vers" ]; then
126133
THIS_IS_EL_CAPITAN="yes"
127134
fi
128135
fi
129-
if [ "${USE_PHP}" == "" ]; then
136+
if [ "${USE_PHP}" == "" ]; then
130137
if [ "${THIS_IS_EL_CAPITAN}" == "yes" ]; then
131138
if [ -r "/usr/libexec/apache2/libphp5.so" ]; then
132139
USE_PHP="-DUSE_PHP"
@@ -138,7 +145,7 @@ if [ "${USE_PHP}" == "" ]; then
138145
fi
139146

140147
# 独自php.ini指定周り
141-
if [ "${USE_PHP}" != "" ]; then
148+
if [ "${USE_PHP}" != "" ]; then
142149
if [ "${APACHE_MY_PHP_INI_DIR}" != "" ]; then
143150
USE_APACHE_MY_PHP_INI_DIR="-DUSE_APACHE_MY_PHP_INI_DIR"
144151
fi
@@ -206,4 +213,4 @@ ${APACHE_ORIG_HTTPD} \
206213

207214
### finish
208215
# remove tmp dir
209-
`rm -r ${TMP_APACHE_SERVER_ROOT}`
216+
`rm -r ${TMP_APACHE_SERVER_ROOT}`

conf/httpd.conf.catalina

+191
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
# 開発環境向け httpd.conf El capitan 向け
2+
# 各種設定値をENVから読んでいます。
3+
ServerRoot ${TMP_APACHE_SERVER_ROOT}
4+
Listen ${BIND_IP}:${LISTEN_PORT}
5+
ServerName ${BIND_IP}:${LISTEN_PORT}
6+
7+
PidFile ${TMP_APACHE_SERVER_ROOT}/logs/httpd.pid
8+
Mutex file:${TMP_APACHE_SERVER_ROOT}/logs default
9+
10+
# mod_action, mod_cgi, mod_rewriteをデフォルトから有効にしてあります
11+
LoadModule mpm_prefork_module /usr/libexec/apache2/mod_mpm_prefork.so
12+
LoadModule authn_file_module /usr/libexec/apache2/mod_authn_file.so
13+
#LoadModule authn_dbm_module /usr/libexec/apache2/mod_authn_dbm.so
14+
#LoadModule authn_anon_module /usr/libexec/apache2/mod_authn_anon.so
15+
#LoadModule authn_dbd_module /usr/libexec/apache2/mod_authn_dbd.so
16+
#LoadModule authn_socache_module /usr/libexec/apache2/mod_authn_socache.so
17+
LoadModule authn_core_module /usr/libexec/apache2/mod_authn_core.so
18+
LoadModule authz_host_module /usr/libexec/apache2/mod_authz_host.so
19+
LoadModule authz_groupfile_module /usr/libexec/apache2/mod_authz_groupfile.so
20+
LoadModule authz_user_module /usr/libexec/apache2/mod_authz_user.so
21+
#LoadModule authz_dbm_module /usr/libexec/apache2/mod_authz_dbm.so
22+
#LoadModule authz_owner_module /usr/libexec/apache2/mod_authz_owner.so
23+
#LoadModule authz_dbd_module /usr/libexec/apache2/mod_authz_dbd.so
24+
LoadModule authz_core_module /usr/libexec/apache2/mod_authz_core.so
25+
#LoadModule authnz_ldap_module /usr/libexec/apache2/mod_authnz_ldap.so
26+
LoadModule access_compat_module /usr/libexec/apache2/mod_access_compat.so
27+
LoadModule auth_basic_module /usr/libexec/apache2/mod_auth_basic.so
28+
#LoadModule auth_form_module /usr/libexec/apache2/mod_auth_form.so
29+
#LoadModule auth_digest_module /usr/libexec/apache2/mod_auth_digest.so
30+
#LoadModule allowmethods_module /usr/libexec/apache2/mod_allowmethods.so
31+
#LoadModule file_cache_module /usr/libexec/apache2/mod_file_cache.so
32+
#LoadModule cache_module /usr/libexec/apache2/mod_cache.so
33+
#LoadModule cache_disk_module /usr/libexec/apache2/mod_cache_disk.so
34+
#LoadModule cache_socache_module /usr/libexec/apache2/mod_cache_socache.so
35+
#LoadModule socache_shmcb_module /usr/libexec/apache2/mod_socache_shmcb.so
36+
#LoadModule socache_dbm_module /usr/libexec/apache2/mod_socache_dbm.so
37+
#LoadModule socache_memcache_module /usr/libexec/apache2/mod_socache_memcache.so
38+
#LoadModule watchdog_module /usr/libexec/apache2/mod_watchdog.so
39+
#LoadModule macro_module /usr/libexec/apache2/mod_macro.so
40+
#LoadModule dbd_module /usr/libexec/apache2/mod_dbd.so
41+
#LoadModule dumpio_module /usr/libexec/apache2/mod_dumpio.so
42+
#LoadModule echo_module /usr/libexec/apache2/mod_echo.so
43+
#LoadModule buffer_module /usr/libexec/apache2/mod_buffer.so
44+
#LoadModule data_module /usr/libexec/apache2/mod_data.so
45+
#LoadModule ratelimit_module /usr/libexec/apache2/mod_ratelimit.so
46+
LoadModule reqtimeout_module /usr/libexec/apache2/mod_reqtimeout.so
47+
#LoadModule ext_filter_module /usr/libexec/apache2/mod_ext_filter.so
48+
#LoadModule request_module /usr/libexec/apache2/mod_request.so
49+
#LoadModule include_module /usr/libexec/apache2/mod_include.so
50+
LoadModule filter_module /usr/libexec/apache2/mod_filter.so
51+
#LoadModule reflector_module /usr/libexec/apache2/mod_reflector.so
52+
#LoadModule substitute_module /usr/libexec/apache2/mod_substitute.so
53+
#LoadModule sed_module /usr/libexec/apache2/mod_sed.so
54+
#LoadModule charset_lite_module /usr/libexec/apache2/mod_charset_lite.so
55+
#LoadModule deflate_module /usr/libexec/apache2/mod_deflate.so
56+
#LoadModule xml2enc_module /usr/libexec/apache2/mod_xml2enc.so
57+
#LoadModule proxy_html_module /usr/libexec/apache2/mod_proxy_html.so
58+
LoadModule mime_module /usr/libexec/apache2/mod_mime.so
59+
#LoadModule ldap_module /usr/libexec/apache2/mod_ldap.so
60+
LoadModule log_config_module /usr/libexec/apache2/mod_log_config.so
61+
#LoadModule log_debug_module /usr/libexec/apache2/mod_log_debug.so
62+
#LoadModule log_forensic_module /usr/libexec/apache2/mod_log_forensic.so
63+
#LoadModule logio_module /usr/libexec/apache2/mod_logio.so
64+
LoadModule env_module /usr/libexec/apache2/mod_env.so
65+
#LoadModule mime_magic_module /usr/libexec/apache2/mod_mime_magic.so
66+
#LoadModule expires_module /usr/libexec/apache2/mod_expires.so
67+
LoadModule headers_module /usr/libexec/apache2/mod_headers.so
68+
#LoadModule usertrack_module /usr/libexec/apache2/mod_usertrack.so
69+
##LoadModule unique_id_module /usr/libexec/apache2/mod_unique_id.so
70+
LoadModule setenvif_module /usr/libexec/apache2/mod_setenvif.so
71+
LoadModule version_module /usr/libexec/apache2/mod_version.so
72+
#LoadModule remoteip_module /usr/libexec/apache2/mod_remoteip.so
73+
LoadModule proxy_module /usr/libexec/apache2/mod_proxy.so
74+
LoadModule proxy_connect_module /usr/libexec/apache2/mod_proxy_connect.so
75+
LoadModule proxy_ftp_module /usr/libexec/apache2/mod_proxy_ftp.so
76+
LoadModule proxy_http_module /usr/libexec/apache2/mod_proxy_http.so
77+
LoadModule proxy_fcgi_module /usr/libexec/apache2/mod_proxy_fcgi.so
78+
LoadModule proxy_scgi_module /usr/libexec/apache2/mod_proxy_scgi.so
79+
#LoadModule proxy_fdpass_module /usr/libexec/apache2/mod_proxy_fdpass.so
80+
LoadModule proxy_wstunnel_module /usr/libexec/apache2/mod_proxy_wstunnel.so
81+
LoadModule proxy_ajp_module /usr/libexec/apache2/mod_proxy_ajp.so
82+
LoadModule proxy_balancer_module /usr/libexec/apache2/mod_proxy_balancer.so
83+
LoadModule proxy_express_module /usr/libexec/apache2/mod_proxy_express.so
84+
#LoadModule session_module /usr/libexec/apache2/mod_session.so
85+
#LoadModule session_cookie_module /usr/libexec/apache2/mod_session_cookie.so
86+
#LoadModule session_dbd_module /usr/libexec/apache2/mod_session_dbd.so
87+
LoadModule slotmem_shm_module /usr/libexec/apache2/mod_slotmem_shm.so
88+
#LoadModule slotmem_plain_module /usr/libexec/apache2/mod_slotmem_plain.so
89+
#LoadModule ssl_module /usr/libexec/apache2/mod_ssl.so
90+
#LoadModule dialup_module /usr/libexec/apache2/mod_dialup.so
91+
LoadModule lbmethod_byrequests_module /usr/libexec/apache2/mod_lbmethod_byrequests.so
92+
LoadModule lbmethod_bytraffic_module /usr/libexec/apache2/mod_lbmethod_bytraffic.so
93+
LoadModule lbmethod_bybusyness_module /usr/libexec/apache2/mod_lbmethod_bybusyness.so
94+
#LoadModule lbmethod_heartbeat_module /usr/libexec/apache2/mod_lbmethod_heartbeat.so
95+
LoadModule unixd_module /usr/libexec/apache2/mod_unixd.so
96+
#LoadModule heartbeat_module /usr/libexec/apache2/mod_heartbeat.so
97+
#LoadModule heartmonitor_module /usr/libexec/apache2/mod_heartmonitor.so
98+
#LoadModule dav_module /usr/libexec/apache2/mod_dav.so
99+
LoadModule status_module /usr/libexec/apache2/mod_status.so
100+
LoadModule autoindex_module /usr/libexec/apache2/mod_autoindex.so
101+
#LoadModule asis_module /usr/libexec/apache2/mod_asis.so
102+
#LoadModule info_module /usr/libexec/apache2/mod_info.so
103+
LoadModule cgi_module /usr/libexec/apache2/mod_cgi.so
104+
#LoadModule dav_fs_module /usr/libexec/apache2/mod_dav_fs.so
105+
#LoadModule dav_lock_module /usr/libexec/apache2/mod_dav_lock.so
106+
#LoadModule vhost_alias_module /usr/libexec/apache2/mod_vhost_alias.so
107+
LoadModule negotiation_module /usr/libexec/apache2/mod_negotiation.so
108+
LoadModule dir_module /usr/libexec/apache2/mod_dir.so
109+
#LoadModule imagemap_module /usr/libexec/apache2/mod_imagemap.so
110+
LoadModule actions_module /usr/libexec/apache2/mod_actions.so
111+
#LoadModule speling_module /usr/libexec/apache2/mod_speling.so
112+
#LoadModule userdir_module /usr/libexec/apache2/mod_userdir.so
113+
LoadModule alias_module /usr/libexec/apache2/mod_alias.so
114+
LoadModule rewrite_module /usr/libexec/apache2/mod_rewrite.so
115+
#LoadModule php5_module /usr/libexec/apache2/libphp5.so
116+
LoadModule hfs_apple_module /usr/libexec/apache2/mod_hfs_apple.so
117+
118+
User ${ORIG_USER}
119+
Group staff
120+
121+
<Directory />
122+
AllowOverride none
123+
Require all denied
124+
</Directory>
125+
126+
<FilesMatch "^\.([Hh][Tt]|[Dd][Ss]_[Ss])">
127+
Require all denied
128+
</FilesMatch>
129+
130+
ErrorLog /dev/stdout
131+
LogLevel warn
132+
133+
LogFormat "%t %h [%>s]: %U%q" php_bs_style
134+
CustomLog /dev/stdout php_bs_style
135+
136+
TypesConfig /etc/apache2/mime.types
137+
138+
DirectoryIndex index.html
139+
140+
### Set up PHP Env.
141+
<IfDefine USE_PHP>
142+
DirectoryIndex index.php index.html
143+
# mod_phpの場合
144+
<IfDefine USE_MOD_PHP>
145+
LoadModule php${MOD_PHP_VERSION}_module ${APACHE_PHP_MODULE_PATH}
146+
147+
<FilesMatch \.php$>
148+
AddType text/html .php
149+
SetHandler application/x-httpd-php
150+
</FilesMatch>
151+
152+
# php.iniを指定する場合
153+
<IFDefine USE_APACHE_MY_PHP_INI_DIR>
154+
PHPIniDir "${APACHE_MY_PHP_INI_DIR}"
155+
</IFDefine>
156+
# PHP_INI_SCAN_DIRはstart.shの環境変数で設定
157+
</IfDefine>
158+
# apache mod_action+php-cgiの場合
159+
<IfDefine !USE_MOD_PHP>
160+
# ScriptAliasを phpenv/versions/x.x.x/bin/ に直接張るのは悪い手法、
161+
# (php-cgi以外もpathが通ってしまうので)
162+
# php-binをどこかにコピーして指定するのが本来正しい。
163+
# ここではローカル開発環境向けなので許す。
164+
# php-cgiでmod_rewriteのQSAを使うと、mod_phpと違ってSCRIPT_NAMEにホスト名が入る事があるので注意
165+
ScriptAlias /php-bin/ ${APACHE_PHP_CGI_CONTAIN_DIR_PATH}
166+
<Directory ${APACHE_PHP_CGI_CONTAIN_DIR_PATH}>
167+
Options ExecCGI
168+
Require all granted
169+
</Directory>
170+
Action php-script /php-bin/php-cgi
171+
<FilesMatch \.php$>
172+
AddHandler php-script .php
173+
</FilesMatch>
174+
175+
# php.iniを指定する場合
176+
<IFDefine USE_APACHE_MY_PHP_INI_DIR>
177+
SetEnv PHPRC "${APACHE_MY_PHP_INI_DIR}/php.ini"
178+
</IFDefine>
179+
<IFDefine USE_APACHE_MY_PHP_INI_SCAN_DIR>
180+
SetEnv PHP_INI_SCAN_DIR "${APACHE_MY_PHP_INI_SCAN_DIR}"
181+
</IfDefine>
182+
</IFDefine>
183+
</IfDefine>
184+
185+
### Setup DocumentRoot
186+
DocumentRoot ${DOC_ROOT}
187+
<Directory ${DOC_ROOT} >
188+
Options FollowSymLinks
189+
AllowOverride All
190+
Require all granted
191+
</Directory>

0 commit comments

Comments
 (0)