<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/install.pecl.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'zh',
  ),
  'this' => 
  array (
    0 => 'install.pecl.windows.php',
    1 => '在 Windows 上安装 PHP 扩展',
    2 => '在 Windows 上安装 PHP 扩展',
  ),
  'up' => 
  array (
    0 => 'install.pecl.php',
    1 => 'PECL 扩展安装',
  ),
  'prev' => 
  array (
    0 => 'install.pecl.downloads.php',
    1 => '下载 PECL 扩展库',
  ),
  'next' => 
  array (
    0 => 'install.pecl.pear.php',
    1 => '用 PEAR 编译共享 PECL 扩展库',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'zh',
    'path' => 'install/pecl.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="install.pecl.windows" class="sect1">
  <h2 class="title">在 Windows 上安装 PHP 扩展</h2>
  <p class="para">
   在 Windows 上有两种加载 PHP 扩展的方式：把扩展编译进 PHP，或者加载 DLL。加载预编译的扩展是更简单更被推荐的方式。
  </p>
  <p class="para">
   要加载扩展，需要在系统中有可用的 <var class="filename">.dll</var> 文件。所有扩展都会由
   PHP 小组定期自动编译（如何下载见下节）。
  </p>
  <p class="para">
   要将扩展编译入 PHP，请参考<a href="install.windows.building.php" class="link">从源程序编译</a>文档。
  </p>
  <p class="para">
   要编译一个独立的扩展（即 DLL 文件），请参考<a href="install.windows.building.php" class="link">从源程序编译</a>文档。如果在
   PHP 发行版和 PCEL 中都没有某 DLL 文件，那可能需要编译之后才能使用该扩展。
  </p>
  <div class="sect2" id="install.pecl.windows.find">
   <h3 class="title">去哪里找扩展库？</h3>
   <p class="para">
    PHP 扩展库通常称为 <var class="filename">php_*.dll</var>（其中星号代表具体某扩展的名字），位于 <var class="filename">PHP\ext</var> 目录下。
   </p>
   <p class="para">
    PHP 发行包中包括了大多数开发者最常用到的扩展库。称为<em>捆绑</em>扩展库。
   </p>
   <p class="para">
    不过，如果捆绑扩展没有提供所需的功能，可以在 <a href="https://pecl.php.net/" class="link external">&raquo;&nbsp;PECL</a> 中找到满足需求的扩展。PHP 扩展社区库（PHP Extension Community Library 简称 PECL）是个
    PHP 扩展的储存库，提供了对于所有已知扩展目录以及下载及开发 PHP 扩展的托管设施。
   </p>
   <p class="para">
    如果针对特定用途开发了扩展，则可以将其托管在 PECL
    中以便于其他有相同需求的用户使用。这样做的好处就是可以得到其他用户的反馈、感谢、错误报告甚至修复/补丁。不过在向
    PECL 提交扩展之前，请先阅读
    <a href="https://pecl.php.net/package-new.php" class="link external">&raquo;&nbsp;PECL 提交指南</a>。
   </p>
  </div>

  <div class="sect2" id="install.pecl.windows.which">
   <h3 class="title">下载哪个扩展？</h3>
   <p class="para">
    <em>很多时候，每个 DLL 都有几个版本可供选择：</em>
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       不同的版本号（至少前两个数字要一致）
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       不同的线程安全性设定
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       不同的处理器体系（x86，x64，...)
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       不同的排错设定
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <code class="literal">其它</code>
      </span>
     </li>
    </ul>
   </p>
   <p class="para">
    请记住，扩展设置应该与所使用的 PHP 可执行文件的设置相匹配。以下脚本可以显示<em>所有</em>
    PHP 设置：
   </p>
   <p class="para">
    <div class="example" id="example-1">
     <p><strong>示例 #1 调用 <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span></strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />phpinfo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    或者在命令行运行：
    <div class="example-contents screen">
<div class="cdata"><pre>
drive:\path\to\php\executable\php.exe -i
</pre></div>
    </div>
   </p>
  </div>
  
  <div class="sect2" id="install.pecl.windows.loading">
   <h3 class="title">载入一个扩展</h3>
   <p class="para">
    最常见的方式是在 <var class="filename">php.ini</var> 配置文件里包含一个 PHP
    扩展。请注意很多扩展已经在 <var class="filename">php.ini</var> 里了，仅需要移除分号来激活它们。
   </p>
   <p class="para">
    需要注意，从 PHP 7.2.0 开始，可以直接用扩展的名称，来替代扩展的文件名。这样配置文件就跟操作系统解耦了，也更容易理解。推荐采用此方式加载扩展。为了与之前的版本保持兼容，直接写扩展名的方式会仍然支持。
   </p>
   <div class="example-contents screen">
<div class="cdata"><pre>
;extension=php_extname.dll
</pre></div>
   </div>
   <div class="example-contents screen">
<div class="cdata"><pre>
extension=php_extname.dll
</pre></div>
   </div>
   <div class="example-contents screen">
<div class="cdata"><pre>
; 自 PHP 7.2.0 起首选：
extension=extname
zend_extension=another_extension
</pre></div>
   </div>
   <p class="para">
    不过呢，有些 web 服务器会搞混，因为其并不一定使用和 PHP
    可执行文件处于同一目录下的 <var class="filename">php.ini</var>
    文件。要搞清楚具体使用了哪一个 <var class="filename">php.ini</var>
    文件，在 <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span> 的输出中查看：
   </p>
   <div class="example-contents screen">
<div class="cdata"><pre>
Configuration File (php.ini) Path  C:\WINDOWS
</pre></div>
   </div>
   <div class="example-contents screen">
<div class="cdata"><pre>
Loaded Configuration File   C:\Program Files\PHP\8.2\php.ini
</pre></div>
   </div>
   <p class="para">
    激活一个扩展后，保存 <var class="filename">php.ini</var>
    文件并重启动 web 服务器，然后用
    <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span> 再次查看确定。新的扩展应该有其自己的一节。
   </p>
  </div>
  
  <div class="sect2" id="install.pecl.windows.problemsolving">
   <h3 class="title">解决问题</h3>
   <p class="para">
    如果某扩展并未在 <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span>
    中显示，应该查看日志以确定问题出在哪里。
   </p>
   <p class="para">
    如果是在命令行中（CLI）使用 PHP，扩展加载出错信息会直接在屏幕显示。
   </p>
   <p class="para">
    如果在 web 服务器中使用 PHP，则日志文件的位置与格式各不相同。请阅读所使用的
    web 服务器之文档以确定日志文件的位置，这与 PHP 本身并无关系。
   </p>
   <p class="para">
    最常见的问题是 DLL 和 DLL 依赖的文件的位置，<var class="filename">php.ini</var>
    中“<a href="ini.core.php#ini.extension-dir" class="link">extension_dir</a>”设置的值，以及编译时的设置不匹配。
   </p>
   <p class="para">
    如果问题出在编译时设置不匹配，那可能所下载的 DLL
    文件不对。可以尝试使用正确的设置重新下载扩展。此外，<span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span>
    可以起到很大帮助。
   </p>
  </div>

 </div><?php manual_footer($setup); ?>