-
Notifications
You must be signed in to change notification settings - Fork 56
/
commandline.xml
217 lines (197 loc) · 7.17 KB
/
commandline.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 8e732e84a1425cf0ab3a5b0da8fe113c7a6da85e Maintainer: mumumu Status: ready -->
<sect1 xml:id="install.windows.commandline" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Microsoft Windows のコマンドラインでの PHP</title>
<para>
この節では、PHP を Windows のコマンドラインで実行するときの注意点やヒントを説明します。
</para>
<note>
<para>
まず最初に <link linkend="install.windows.manual">
手動でのインストールの手順</link> を読みましょう!
</para>
</note>
<para>
特に Windows に手を加えなくても、PHP をコマンドラインから実行することはできます。
<screen>
<![CDATA[
C:\php\php.exe -f "C:\PHP Scripts\script.php" -- -arg1 -arg2 -arg3
]]>
</screen>
</para>
<para>
しかし、次の手順に従えば、さらにシンプルに実行することができます。
この中にはすでに実行済みのものがあるかもしれませんが、
順を追って進めていくために
もう一度ここで説明しておきます。
<itemizedlist>
<note>
<para>
<envar>PATH</envar> と <envar>PATHEXT</envar> は
Windows で重要な働きをするシステム変数です。
既存の変数の値を上書きしないように注意しましょう。
あくまでも追記するだけにします。
</para>
</note>
<listitem>
<para>
PHP の実行ファイル (<filename>php.exe</filename>、
<filename>php-win.exe</filename> あるいは
<filename>php-cli.exe</filename>。
PHP のバージョンや設定によって変わります)
がある場所を環境変数 <envar>PATH</envar> の最後に追加します。
PHP のディレクトリを <envar>PATH</envar> に追加する方法は、<link
linkend="faq.installation.addtopath">FAQ の項目</link>
を参照ください。
</para>
</listitem>
<listitem>
<para>
拡張子 <literal>.PHP</literal> を、環境変数
<varname>PATHEXT</varname> の最後に追加します。これは、環境変数
<envar>PATH</envar> の変更と同時に行うこともできます。
<link linkend="faq.installation.addtopath">FAQ</link>
に書かれている手順に従いましょう。ただし、環境変数
<envar>PATH</envar> の部分は
<varname>PATHEXT</varname> に変更します。
<note>
<para>
<literal>.PHP</literal> をどの位置に書くかによって、
ファイル名がマッチしたときに実行されるスクリプトあるいはプログラムが決まります。
たとえば <literal>.PHP</literal> を
<literal>.BAT</literal> より前に書くと、
同じ名前のバッチファイルがあってもスクリプトのほうを優先して実行します。
</para>
</note>
</para>
</listitem>
<listitem>
<para>
拡張子 <literal>.PHP</literal> をファイル形式と関連づけます。
これは、次のコマンドで行います:
<screen>
<![CDATA[
assoc .php=phpfile
]]>
</screen>
</para>
</listitem>
<listitem>
<para>
ファイル形式 <literal>phpfile</literal> を適切な PHP 実行ファイルと関連づけます。
これは、次のコマンドで行います。
<screen>
<![CDATA[
ftype phpfile="C:\php\php.exe" -f "%1" -- %~2
]]>
</screen>
</para>
</listitem>
</itemizedlist>
</para>
<para>
このようにしておくと、どのディレクトリにあるスクリプトを実行するときにも
PHP 実行ファイルのパスや拡張子 <literal>.PHP</literal> をタイプしなくて済むようになります。
また、スクリプトに渡すパラメータを指定することもできます。
</para>
<para>
次の例は、レジストリの変更の一部を示したものです。これらは手動で行うこともできます。
<example>
<title>Registry changes</title>
<screen>
<![CDATA[
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.php]
@="phpfile"
"Content Type"="application/php"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile]
@="PHP Script"
"EditFlags"=dword:00000000
"BrowserFlags"=dword:00000008
"AlwaysShowExt"=""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\DefaultIcon]
@="C:\\php\\php-win.exe,0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell]
@="Open"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open]
@="&Open"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open\command]
@="\"C:\\php\\php.exe\" -f \"%1\" -- %~2"
]]>
</screen>
</example>
</para>
<para>
これらの変更をすれば、同じコマンドを次のように書くことができます:
<screen>
<![CDATA[
"C:\PHP Scripts\script" -arg1 -arg2 -arg3
]]>
</screen>
また、<literal>"C:\PHP Scripts"</literal> が環境変数
<envar>PATH</envar> に含まれていれば、次のように書くこともできます:
<screen>
<![CDATA[
script -arg1 -arg2 -arg3
]]>
</screen>
</para>
<note>
<para>
これらのテクニックを使って
PHP スクリプトをコマンドラインフィルタとして使おうとすると、
ちょっとした問題が発生します。
「コマンドラインフィルタとして使う」とは、たとえば
<screen>
<![CDATA[
dir | "C:\PHP Scripts\script" -arg1 -arg2 -arg3
]]>
</screen>
あるいは
<screen>
<![CDATA[
dir | script -arg1 -arg2 -arg3
]]>
</screen>
のように使うということです。
このようにすると、スクリプトがハングして何も出力されなくなります。
これをうまく動作させるには、さらにレジストリを変更しなければなりません。
<screen>
<![CDATA[
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
"InheritConsoleHandles"=dword:00000001
]]>
</screen>
この件に関する詳細な情報は <link
xlink:href="http://support.microsoft.com/default.aspx?scid=kb;en-us;321788">Microsoft
Knowledgebase Article : 321788</link> を参照ください。
Windows 10 ではこの設定が変更されたようです。Windows 10 をインストールしたデフォルトの状態で、
コンソールのハンドルが自動的に引き継がれるようになります。この件に関しては、
<link
xlink:href="https://social.msdn.microsoft.com/Forums/en-US/f19d740d-21c8-4dc2-a9ab-d5c0527e932b/nasty-file-association-regression-bug-in-windows-10-console?forum=windowssdk">
Microsoft のフォーラムへの投稿</link> に説明があります。
</para>
</note>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->