2024 年日本 PHP 研討會

gnupg_init

(PECL gnupg >= 0.4)

gnupg_init初始化連線

說明

gnupg_init(?陣列 $options = null): 資源

參數

options

必須是一個關聯式陣列。它用於更改加密引擎的預設配置。

設定覆寫 (Configuration Overrides)
鍵值 (Key) 類型 (Type) 說明 (Description)
file_name 字串 (String) 這是執行此協定的可執行程式的檔案名稱,通常是 gpg 可執行檔的路徑。
home_dir 字串 (String) 這是設定目錄的目錄名稱。它也會覆寫用於相同目的的 GNUPGHOME 環境變數。

回傳值 (Return Values)

一個 GnuPG 資源 (Resource) 連線,供其他 GnuPG 函式使用。

更新日誌 (Changelog)

版本 (Version) 說明
PECL gnupg 1.5.0 新增了 options 參數。

範例 (Examples)

範例 #1:程序式 gnupg_init() 範例,使用預設設定

<?php
$res
= gnupg_init();
?>

範例 #2:程序式 gnupg_init() 範例,覆寫檔案名稱和家目錄

<?php
$res
= gnupg_init(["file_name" => "/usr/bin/gpg2", "home_dir" => "/var/www/.gnupg"]);
?>

範例 #3:物件導向 gnupg 初始化器範例,使用預設設定

<?php
$gpg
= new gnupg();
?>

範例 #4:物件導向 gnupg 初始化器範例,覆寫檔案名稱和家目錄

<?php
$gpg
= new gnupg(["file_name" => "/usr/bin/gpg2", "home_dir" => "/var/www/.gnupg"]);
?>

新增註釋 (add a note)

使用者貢獻的註釋 (User Contributed Notes) 2 則註釋

der_axel at gmx dot de
7 年前
在呼叫 gnupg_init() 之前,請先設定正確的 GNUPG 環境!

目前的 FPM/FastCGI/Module 使用者必須對該目錄具有讀取權限 - 如果您要匯入的話,則需要寫入權限。如果設定不正確,您不會收到錯誤訊息。
如果沒有正確的環境,所有其他 gnupg 函式將無法如您預期般運作。

<?php
// 輸入您的 .gnupg 環境
putenv('GNUPGHOME=/var/www/vhosts/yourdomain/.gnupg');
error_reporting(E_ALL);
$res = gnupg_init();
gnupg_seterrormode($res,GNUPG_ERROR_WARNING);
$info = gnupg_keyinfo($res, 'your-key-id');
echo
"金鑰資訊<pre>";
var_dump($info);
echo
"</pre>";
?>
djmaze
2 年前
請確認 home_dir 選項的字元數不要過長,否則私鑰會失效。

您會發現函式執行時間很長(數秒)。

命令列測試產生錯誤
> gpg: 無法連線到代理程式:IPC 連線呼叫失敗

執行 `gpg-agent --daemon --homedir /very/long/path/to/.gnupg` 產生錯誤。
> '/very/long/path/to/.gnupg/S.gpg-agent.extra' 的 socket 名稱過長

因此,您必須檢查 home_dir + '/S.gpg-agent.extra' 的長度
* 在 Linux 上 < 107 個字元
* 在 BSD 4.4 上 < 104 個字元
To Top