1

我使用这个 Yubico 身份验证 PHP 类:https ://github.com/Yubico/php-yubico 。我使用以下代码创建 php 文件 test.php:

<?php
 require_once 'Auth/Yubico.php';
 $otp = "ccbbddeertkrctjkkcglfndnlihhnvekchkcctif";

 # Generate a new id+key from https://api.yubico.com/get-api-key/
 $yubi = new Auth_Yubico('42', 'FOOBAR=');
 $auth = $yubi->verify($otp);
 if (PEAR::isError($auth)) {
    print "<p>Authentication failed: " . $auth->getMessage();
    print "<p>Debug output from server: " . $yubi->getLastResponse();
 } else {
    print "<p>You are authenticated!";
 }
?>

并在这个 github 库中执行所有指令。当我打开这个脚本时,我得到:

警告:require_once():open_basedir 限制生效。文件(/usr/share/php/Auth/Yubico.php)不在允许的路径中:/var/www/hmci/data/www/hmci 中的 (/var/www/hmci/data:.)第 2 行的 .ru/php-yubico/test.php 警告:require_once(/usr/share/php/Auth/Yubico.php):无法打开流:/var/www/hmci/data/www 中不允许操作/hmci.ru/php-yubico/test.php 在第 2 行致命错误:require_once(): 无法打开所需的 'Auth/Yubico.php' (include_path='.:/usr/share/php:/usr/share/ pear') 在第 2 行的 /var/www/hmci/data/www/hmci.ru/php-yubico/test.php

如何解决这个问题呢?

4

2 回答 2

2

open_basedir是限制 PHP 访问特定目录的 PHP 选项。

您在包含路径中拥有该目录/usr/share/php,但无权访问它。include_path通常,PHP 会一一尝试所有路径。Auth/Yubico.php这意味着 PHP在当前目录中找不到文件,所以 PHP 在/usr/share/phpnext 中搜索。

确保您要包含的文件确实存在。您还可以/usr/share/php从包含路径中删除(通过编辑php.ini文件,如果您可以访问它,或者使用该ini_set()方法)。

于 2013-01-22T18:19:20.097 回答
2

使用要包含的文件的显式路径会导致 PHP 跳过目录扫描,从而导致错误:

require_once dirname(__FILE__) . '/Auth/Yubico.php';
于 2015-08-26T17:12:08.503 回答