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 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434
  
     | 
    
      <?xml version="1.0" encoding="utf-8"?>
 <chapter id="faq.build">
  <title>構築時の問題</title>
  <titleabbrev>構築時の問題</titleabbrev>
  
  <para>
   本節では、構築時に発生する多くの一般的なエラーを集めたものです。
  </para>
  
  <qandaset>
   <qandaentry id="faq.build.configure">
    <question>
     <para>
      anonymous CVSサービスにより最新版のPHPを入手しましたが、
      configureスクリプトがありません!
     </para>
    </question>
    <answer>
     <para>
      configure.inからconfigureスクリプトを生成するためには、GNU
      autoconfパッケージが必要です。CVSサーバからソースを入手した後、
      最上位のディレクトリで<command>./buildconf</command>を実行して下
      さい。(また、configureに
      <literal>--enable-maintainer-mode</literal>オプションを付けて実
      行した場合以外は、configureスクリプトはconfigure.inファイルが更
      新された際に自動的に再構築を行いません。このため、configure.inが
      変更された場合には忘れずに手動で再構築を行う必要があります。
      再構築の際に行われることの1つは、configureまたはconfig.statusを
      実行した後、Makefileの中の@VARIABLE@のような物を見つけることです。)
     </para>
    </answer>
   </qandaentry>
   
   <qandaentry id="faq.build.configuring">
    <question>
     <para>
      PHPをApacheと組みあわせて動作するようにconfigureを行う際に問題が
      あります。httpd.hが見付からないといわれますが、指定した場所にこ
      のファイルはあるのです!
     </para>
    </question>
    <answer>
     <para>
      configure/setupスクリプトにApacheソースツリーの最上位の場所を指
      定する必要があります。これは、'
      <literal>--with-apache=/path/to/apache</literal>'を指定するので
      あって、'<literal>--with-apache=/path/to/apache/src</literal>'で
      はないということです。
     </para>
    </answer>
   </qandaentry>
   <qandaentry id="faq.build.not_found">
    <question>
     <para>
      configureを実行した際、GD、gdbmまたは他のパッケージのファイルま
      たはライブラリを見つけることができないと言われます。
     </para>
    </question>
    <answer>
     <para>
      Cプリプロセッサおよびリンカに次のように追加でフラグを指定するこ
      とにより、configureスクリプトがヘッダファイルまたはライブラリを
      標準以外の場所で探すことが可能となります。
      <programlisting>
    CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
      </programlisting>
      ログインシェルとしてcsh系のシェルを使用している場合、次のように
      なります。
      <programlisting>
    env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
      </programlisting>
     </para>
    </answer>
   </qandaentry>
   <qandaentry id="faq.build.yytname">
    <question>
     <para>
      ファイルlanguage-parser.tab.cをコンパイルする際、 'yytname
      undeclared'というエラーが発生します。
     </para>
    </question>
    <answer>
     <para>
      bisonのバージョンを更新する必要があります。最新版は、
      <ulink url="&faqurl.bison;">&faqurl.bison;</ulink>にあります。
     </para>
    </answer>
   </qandaentry>
   <qandaentry id="faq.build.link">
    <question>
     <para>
      'make'を実行する際、実行には成功しているようですがコンパイルする
      最終的なアプリケーションをリンクしようとした際に何かファイルが見
      つからないというエラーが発生します。
     </para>
    </question>
    <answer>
     <para>
      古いバージョンのmakeには、functionsディレクトリにあるファイルの
      コンパイルされたものを同じディレクトリに正しく入れないものがあり
      ます。"<command>cp *.o functions</command>"を試しに実行してから
      '<command>make</command>' を再度実行し、解決されるか確認して下さ
      い。解決される場合には、GNU makeの最近のバージョンに更新するべき
      です。
     </para>
    </answer>
   </qandaentry>
   <qandaentry id="faq.build.undefined">
    <question>
     <para>
      PHPをリンクする際、未定義の参照があるというエラーが複数発生しま
      す。
     </para>
    </question>
    <answer>
     <para>
      最後に適切なライブラリが全てインクルードされているかどうか確認し
      て下さい。よくあるのは、'-ldl'や指定したデータベースのサポート機
      能に必要なライブラリの指定が欠けているというものです。
     </para>
     <para>
      Apache 1.2.xとリンクする場合には、適当な情報をConfigurationファ
      イルのEXTRA_LIBSの行に追加し、Apacheの Configureスクリプトを再度
      実行したかどうかを確認して下さい。より詳細な情報については、配布
      ファイルに付属するファイル
      <ulink url="&faqurl.file.installation;">INSTALL</ulink>を参照下
      さい。
     </para>
     <para>
      何名かの人からApacheとリンクする際に'
      <filename>libphp4.a</filename>'の直後に'-ldl'を追加する必要があ
      ることも報告されています。
     </para>
    </answer>
   </qandaentry>
   <qandaentry id="faq.build.Apache">
    <question>
     <para>
      PHPをApache 1.3と組み合わせて構築する手法が分かりません。
     </para>
    </question>
    <answer>
     <para>
      この手順は実際には非常に簡単です。以下の手順に注意深く従って下さ
      い。
      <itemizedlist>
       <listitem>
        <simpara>
         <ulink url="&faqurl.apache;">&faqurl.apache;</ulink>から最新
         のApache 1.3配布ファイルを取得して下さい。
        </simpara>
       </listitem>
       <listitem>
        <simpara>
         これをどこか、例えば、
         <filename>/usr/local/src/apache-1.3</filename>で
         ungzip、untarして下さい。
        </simpara>
       </listitem>
       <listitem>
        <simpara>
         まず、
         <command>./configure
         --with-apache=/<path>/apache-1.3</command>を実行し、PHP
         をコンパイルして下さい。
         (<path> の部分は実際のapache-1.3ディレクトリのパスに置
         き換えて下さい)
        </simpara>
       </listitem>
       <listitem>
        <simpara>
         '<literal>make</literal>' を実行した後、'<literal>make
         install</literal>'を実行して下さい。これにより、PHPが構築され、
         必要なファイルがApacheのソースツリーにコピーされます。
        </simpara>
       </listitem>
       <listitem>
        <simpara>
         ディレクトリを
         <filename>/<path>/apache-1.3/src</filename>に移動し、
         <filename>Configuration</filename>ファイルを編集して下さい。
         このファイルに以下を追加して下さい。: 
         <literal>AddModule modules/php4/libphp4.a</literal>
        </simpara>
       </listitem>
       <listitem>
        <simpara>
         '<command>./Configure</command>' を実行した後、'
         <literal>make</literal>'を実行して下さい。
        </simpara>
       </listitem>
       <listitem>
        <simpara>
         以上の手順によりPHP対応のhttpdバイナリが構築できました。
        </simpara>
       </listitem>
      </itemizedlist>
     </para>
     <para>
      <emphasis>注意:</emphasis> : Apache の新しい
      <literal>./configure</literal>スクリプトを使用することも可能です。
      Apache配布ファイルの<literal>README.configure</literal>ファイル
      の指示を参照下さい。また、PHP配布ファイルの
      <filename>INSTALL</filename> ファイルも参照下さい。
     </para>
    </answer>
   </qandaentry>
   <qandaentry id="faq.build.not_running">
    <question>
     <para>
      インストール手順に完全に基づきUNIX上でApacheモジュール版をインス
      トールしましたが、ブラウザでアクセスするとPHPスクリプトが表示さ
      れ、ファイルを保存しますかと尋ねられます。
     </para>
    </question>
    <answer>
     <para>
      これは、何らかの理由によりPHPモジュールが起動していないことを意
      味しています。助けを求める質問を行う前にまず以下を確認下さい。
      <itemizedlist>
       <listitem>
        <simpara>
         実行しているhttpdバイナリが構築したばかりの新しいhttpdバイナ
         リであることを確認して下さい。確認を行うには以下のように入力
         します。
         <literal>/path/to/binary/httpd -l</literal>
        </simpara>
        <simpara>
         <filename>mod_php3.c</filename> または
         <filename>mod_php4.c</filename> がリストの中にない場合、正し
         いバイナリが実行されていません。正しいバイナリを見つけて、イ
         ンストールして下さい。
        </simpara>
       </listitem>
       <listitem>
        <simpara>
       <literal>Apache .conf</literal> ファイルの1つに正しいMIME型
         が追加されていることを確認して下さい。これは以下のようになり
         ます。
         <literal>AddType application/x-httpd-php3 .php3</literal>
         (PHP 3の場合)
        </simpara>
        <simpara>
         または <literal>AddType application/x-httpd-php
         .php</literal> (PHP 4の場合)
        </simpara>
        <simpara> 
         また、このAddTypeの行が、
         <Virtualhost> または <Directory> ブロックの中に隠
         されて、テスト用のスクリプトの場所に適用できていないようなこ
         とがないことを確認して下さい。
        </simpara>
       </listitem>
       <listitem>
        <simpara>
         最後に、デフォルトのApache設定ファイルの場所はApache 1.2と
         Apache 1.3の間で変更されています。AddTypeの行を追加した設定ファ
         イルが実際に読み込まれていることを確認して下さい。このファイ
         ルが正しく読み込まれている場合には、明らかな構文エラーを
         httpd.confファイルの中に書き込んでしまったり、何らかの明らか
         な変更があった可能性があります。
        </simpara>
       </listitem>
      </itemizedlist>
     </para>
    </answer>
   </qandaentry>
   <qandaentry id="faq.build.activate_module">
    <question>
     <para>
      <literal>--activate-module=src/modules/php4/libphp4.a</literal>
      と書いてありますが、ファイルがありません。このため、
      <literal>--activate-module=src/modules/php4/libmodphp4.a</literal>に
      変更しましたが、やはりだめです。何が起きているのでしょう?
     </para>
    </question>
    <answer>
     <para>
      libphp4.aファイルはこの時点では存在しない、ということに気をつけて下さい。
      このファイルは、Apacheの構築時に自動的に作成されます。
     </para>
    </answer>
   </qandaentry>
   <qandaentry id="faq.build.ansi">
    <question>
     <para>
      <literal>--activate-module=src/modules/php4/libphp4.a</literal>
      を指定し、PHPを静的モジュールとして組み込んでApacheを構築しよう
      とした際に、システムがANSI対応ではないというエラーを発生します。
     </para>
    </question>
    <answer>
     <para>
      Apacheのこのエラーメッセージは紛らわしく、より新しいバージョンで
      は修整されています。
     </para>
    </answer>
   </qandaentry>
   <qandaentry id="faq.build.apxs">
    <question>
     <para>
      <literal>--with-apxs</literal>を指定してPHPを構築しようとした際、
      奇妙なエラーメッセージが出力されます。
     </para>
    </question>
    <answer>
     <para>
      ここでは、確認すべきことが3点あります。まず、何らかの理由により、
      Apacheがapxs Perlスクリプトを構築する際に適当なコンパイラやフラ
      グ変数を付けないで構築されてしまうことが時々あります。
      使用するapxsの場所を見つけたら('which apxs'コマンドを試してみて
      ください。/usr/local/apache/bin/apxsまたは/usr/sbin/apxs等にあり
      ます)、以下の行を確認して下さい。
      <programlisting>
my $CFG_CFLAGS_SHLIB  = ' ';          # substituted via Makefile.tmpl
my $CFG_LD_SHLIB      = ' ';          # substituted via Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = ' ';          # substituted via Makefile.tmpl
      </programlisting>
      上記のようになっている場合は問題です。これらの行は空白になっているか
      'q()'のような正しくない値になっていると思います。これを以下のように
      変更して下さい。
      <programlisting>
my $CFG_CFLAGS_SHLIB  = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmpl
my $CFG_LD_SHLIB      = 'gcc';             # substituted via Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = q(-shared);        # substituted via Makefile.tmpl 
      </programlisting>
      可能性のある第2の問題は、RedHat-6.1と6.2でのみ存在する問題です。
      RedHatが出荷した apxs スクリプトは壊れています。以下の行を見て下さい。
      <programlisting>
my $CFG_LIBEXECDIR    = 'modules';         # substituted via APACI install
      </programlisting>
      上の行がある場合、これを次のように変更して下さい。
      <programlisting>
my $CFG_LIBEXECDIR    = '/usr/lib/apache'; # substituted via APACI install
      </programlisting>
      最後に、Apacheのconfigure/再インストールを行います。その際、
      './configure' と'make'の間に'make clean'を行って下さい。
     </para>
    </answer>
   </qandaentry>
   <qandaentry id="faq.build.microtime">
    <question>
     <para>
      'make'の間、microtimeおよび'RUSAGE_'関連で多くのエラーを発生しま
      す。
    </para>
    </question>
    <answer>
     <para>
      インストール時に'make'を行っている際、以下のようなエラーを発生す
      るとした場合、
      <programlisting>
    microtime.c: In function `php_if_getrusage':
    microtime.c:94: storage size of `usg' isn't known
    microtime.c:97: `RUSAGE_SELF' undeclared (first use in this function)
    microtime.c:97: (Each undeclared identifier is reported only once
    microtime.c:97: for each function it appears in.)
    microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function)
    make[3]: *** [microtime.lo] Error 1
    make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard'
    make[2]: *** [all-recursive] Error 1
    make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard'
    make[1]: *** [all-recursive] Error 1
    make[1]: Leaving directory `/home/master/php-4.0.1/ext'
    make: *** [all-recursive] Error 1
      </programlisting>
     </para>
     <para>
      あなたのシステムは壊れています。使用しているglibcと同じバージョンの
      glibc-develパッケージをインストールして、/usr/include ファイルを修正
      する必要があります。この問題は、PHPの動作とは全く関係ありません。
      これを示すには、次のような簡単なテストを行ってみて下さい。
     <programlisting>
    $ cat >test.c <<X
    #include <sys/resource.h>
    X
    $ gcc -E test.c >/dev/null
      </programlisting>
      これが、エラーが発生する場合、インクルードファイルが見つからない
      ことがわかります。
     </para>
    </answer>
   </qandaentry>
   <qandaentry>
    <question>
     <para>
      PHPをアップグレードしたいのですが、現在インストールされているPHPを
      構築するときに指定した<command>./configure</command>コマンドの
      オプションはどこで知ることが出来ますか?
     </para>
    </question>
    <answer>
     <para>
      現在インストールされているPHPを構築した時のディレクトリにある
      config.nice ファイルを見るか、もしもうそのディレクトリが無い場合は
      <programlisting>
       <?php phpinfo(); ?>
      </programlisting>
      というスクリプトを実行すれば、最初の方にある<command>./configure</command>
      という箇所に表示されます。
     </para>
    </answer>
   </qandaentry>
  </qandaset>
 </chapter>
 <!-- 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:"../../manual.ced"
 sgml-exposed-tags:nil
 sgml-local-catalogs:nil
 sgml-local-ecat-files:nil
 End:
 -->
 
     |