當前位置:首頁 » 存儲配置 » 配置文件重置需要什麼函數

配置文件重置需要什麼函數

發布時間: 2024-01-03 14:07:29

A. 如何修改文件config.php或者載入自定義的配置文件

按這樣修改就可以了:
public目錄下的自定義配置文件siteconfig.inc.php,用如下代碼:
<?php
$siteconfig = require '__PUBLIC__/siteconfig.inc.php';
$config = array(
//'配置項'=>'配置值'
// 添加資料庫配置信息
'USERNAME' => 'admin',
'DB_TYPE' => 'mysql', // 資料庫類型
'DB_HOST' => '127.0.0.1', // 伺服器地址
'DB_NAME' => 'detectinfo', // 資料庫名
//'DB_USER' => 'root', // 用戶名
//'DB_PWD' => '', // 密碼
'DB_PORT' => '', // 埠
'DB_PREFIX' => '', // 資料庫表前綴
);
return array_merge($config,$siteconfig);
?>
復制代碼
但是require函數會報錯
ERROR:require(): Failed opening required '__PUBLIC__/siteconfig.inc.php' (include_path='.;C:\php\pear;C:\wamp\www\ThinkPHP/Extend/Vendor/') in C:\wamp\www\PluginDetect\Conf\config.php on line 2

B. 如何修改一個配置文件

1. 引言
OpenWRT中採用LuCI作為它的Web interface界面框架,採用Lua語言。在本文中將以一個簡單的示例詳細描述如何自定義開發一個界面,對一個配置文件進行操作。
2.Model與Controler
MVC的設計理念是進行LuCI開發的一個關鍵
在LuCI中Controller的文件定義在固件中的/usr/lib/lua/luci/controller目錄中,模版目錄在/usr/lib/lua/luci/view目錄下,而model則是在/usr/lib/lua/luci/model中。而model中有一個特殊的模塊叫做CBI,被稱為LuCI中最酷的功能,該模塊的功能是方便的對一個配置文件進行修改。
3.示例
本文中的頁面建立在LuCI界面的network下,不單獨創建頁面,因此無需寫view,只用些controller和model就可以了。
1)首先創建一個controller
ccontroller/mycbi.lua
mole("LUCI.controller.mycbi", package.seeall)

function index()
entry({"admin", "network", "mycbi_change"}, cbi("mycbi-model/mycbimole"), "Change My Conf", 30).dependent=false
end

解釋一下關鍵代碼:

在index()函數中,使用entry函數來完成每個模塊函數的注冊,官方說明文檔如下:
entry(path, target, title=nil, order=nil)
path is a table that describes the position in the dispatching tree: For example a path of {"foo", "bar", "baz"} would insert your node in foo.bar.baz.
target describes the action that will be taken when a user requests the node. There are several predefined ones of which the 3 most important (call, template, cbi) are described later on on this page
title defines the title that will be visible to the user in the menu (optional)
order is a number with which nodes on the same level will be sorted in the menu (optional)
其中target主要分為三類:call,template和cbi。call用來調用函數,template用來調用已有的htm模版,而CBI模塊則是使用非常頻繁也非常方便的模塊,包含的一系列lua文件構成界面元素的組合,所有cbi模塊中的控制項都需要寫在luci.cbi.Map中,在cbi模塊中定義各種控制項,Luci系統會自動執行大部分處理工作。在cbi.lua文件中封裝了所有的控制項元素,例如復選框,下拉列表等。

2)創建model
#mkdir /usr/lib/lua/luci/model/cbi/mycbi-model
#vim /usr/lib/lua/luci/model/cbi/mycbi-model/mycbimole.lua
m = Map("mycbi", "mycbi conf change interface")
s = m:section(TypedSection, "MySection")
s.addremove = true
s:option(Value, "username", "Name:")
key=s:option(Value, "password", "Password")
key.password=true;
return m

解釋一下關鍵代碼:

3)創建配置文件
#vim /etc/config/mycbi
config 'MySection' 'mycbi'

option 'username' 'youruser'
option 'password' 'yourpass'

4. 測試
進入OpenWRT界面,登陸後就可以點擊逗網路地,如果是英文就點擊network,可以看到我們添加的子頁面入口:

點擊後進入頁面如下:

輸入用戶名密碼:root/test,點擊保存,後台查看配置文件已經被更改:

5. 問題記錄
1)首先,配置文件不能有任何後綴,否則頁面載入後是空頁面
2)如果出現500 錯誤,說明lua文件寫的有問題,要麼是路徑錯誤,要麼是語法錯誤,暫時沒找到寫日誌的方法,可以用wireshark抓包看錯誤

C. 如何使用composer的autoload來自動載入自己編寫的函數庫與類庫

composer的出現真是讓人們眼前一亮,web開發從此變成了一件很『好玩』的事情,開發一個CMS就像在搭積木,從packagist中取出『積木』搭建在自己的代碼中,一點一點搭建出一個屬於自己的王國。
從此以後我基本就拋棄了require和include函數,一個項目中,這兩個函數只可能出現一次,那就是require '../vendor/autoload.php'。
那麼,既然拋棄了傳統的文件包含方法,我們使用所有類庫都將用namespace和composer自帶的autoload。可是,我們自己編寫的函數庫與類庫,怎麼用composer的方法來自動載入呢?

這就要從composer.json說起,我們需要通過修改這個文件來達到目的。
composer.json相當於是composer的配置文件,這個配置文件中有一個autoload段,比如我的一個項目:

其中又包含主要的兩個選項: files 和 psr-4。
files就是需要composer自動幫我們載入的函數庫(不含類),只要在後面的數組中將函數庫的文件路徑寫入即可。
psr-4顧名思義,是一個基於psr-4(http://www.php-fig.org/psr/psr-4/)規則的類庫自動載入對應關系,只要在其後的對象中,以 "命名空間": "路徑" 的方式寫入自己的類庫信息即可。
修改完成後,只要執行一下composer update,即可完成對應工作。

之後,我們在項目中,用如下方式即可載入自定義類庫:
new \Core\View();

composer的autoload將會自動包含"./core/view.php",並找到其中的Core命名空間下的View類。

我們來深挖一下,探索一下autoload的原理。
在我們修改完composer.json並執行update後,將會修改./vender/composer/autoload_psr4.php,比如我的某個項目,其中增加了這樣一個對應關系:

這其實就是我剛剛在.json中添加的對應關系,他等於將.josn的配置文件,換成了php的形式。
那麼我看到vendor/autoload.php:
<?php

// autoload.php @generated by Composer

require_once __DIR__ . '/composer' . '/autoload_real.php';

return ::getLoader();

其執行了一個自動生成的類中的getLoader方法。
跟進:
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}

spl_autoload_register(array('', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('', 'loadClassLoader'));

$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
$loader->set($namespace, $path);
}

$map = require __DIR__ . '/autoload_psr4.php';
foreach ($map as $namespace => $path) {
$loader->setPsr4($namespace, $path);
}

$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}

$loader->register(true);

$includeFiles = require __DIR__ . '/autoload_files.php';
foreach ($includeFiles as $file) {
($file);
}

return $loader;
}

可以明顯看到,他將autoload_namespaces.php、autoload_psr4.php、autoload_classmap.php、autoload_files.php等幾個配置文件包含了進來,並進行了相關處理(setPsr4),最後注冊(register)。
那麼我們跟進register方法:
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
}

這函數就一行,但簡單明了,直接調用php自帶的spl_autoload_register函數,注冊處理__autoload的方法,也就是loadClass方法。再跟進loadClass方法:
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
includeFile($file);

return true;
}
}

從函數名字就可以大概知道流程:如果存在$class對應的這個$file,則include進來。
那麼進findFile方法里看看吧:
public function findFile($class)
{
// work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
if ('\\' == $class[0]) {
$class = substr($class, 1);
}

// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
if ($this->classMapAuthoritative) {
return false;
}

$file = $this->findFileWithExtension($class, '.php');

// Search for Hack files if we are running on HHVM
if ($file === null && defined('HHVM_VERSION')) {
$file = $this->findFileWithExtension($class, '.hh');
}

if ($file === null) {
// Remember that this class does not exist.
return $this->classMap[$class] = false;
}

return $file;
}

通過類名找文件,最終鎖定在findFileWithExtension方法中。
不過發現了一個小寶藏:在php5.3.0~5.3.2版本下,類名的第一個字元是\的小bug,也許以後挖漏洞會用上。
還是跟進findFileWithExtension方法:
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;

$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
if (0 === strpos($class, $prefix)) {
foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
return $file;
}
}
}
}
}

// PSR-4 fallback dirs
foreach ($this->fallbackDirsPsr4 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
return $file;
}
}

// PSR-0 lookup
if (false !== $pos = strrpos($class, '\\')) {
// namespaced class name
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
} else {
// PEAR-like class name
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
}

if (isset($this->prefixesPsr0[$first])) {
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
if (0 === strpos($class, $prefix)) {
foreach ($dirs as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
}
}
}

// PSR-0 fallback dirs
foreach ($this->fallbackDirsPsr0 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}

// PSR-0 include paths.
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
}

最終實現將命名空間\類這樣的類名,給轉換成目錄名/類名.php這樣的路徑,並返回完整路徑。
我發現composer的autoload與php自帶的spl_autoload,在包含文件時有一點小區別。那就是,spl_autoload會查找.inc類型的文件名,但composer不會。
另外也可以發現,雖然配置文件的名字是autoload_psr4.php,但實際上psr0格式的自動載入也是支持的。二者最大的不同就是psr0中用"_"來代替目錄間的"\"。

D. PHP獲取和操作配置文件php.ini的幾個函數介

PHP官方手冊上面有詳細的說明。

ini_set — 為一個配置選項設置值

PHP官方手冊: ini_set

ini_get — 獲取一個配置選項的值

PHP官方手冊: ini_get

熱點內容
渲染器伺服器ip一定嗎 發布:2024-11-28 18:44:38 瀏覽:648
光遇的伺服器老是爆滿怎麼辦 發布:2024-11-28 18:41:10 瀏覽:714
sql最大日期的記錄 發布:2024-11-28 18:35:35 瀏覽:716
數據伺服器和電腦如何連接 發布:2024-11-28 18:06:49 瀏覽:745
怎麼讓編譯器輸出的字元相隔單位 發布:2024-11-28 18:04:25 瀏覽:524
w7電腦如何顯示配置 發布:2024-11-28 18:01:35 瀏覽:116
智通編譯股票股東 發布:2024-11-28 17:51:56 瀏覽:731
恥辱2低配置怎麼設置 發布:2024-11-28 17:51:50 瀏覽:92
王水是用什麼配置的 發布:2024-11-28 17:43:59 瀏覽:621
編程貓簡 發布:2024-11-28 17:30:20 瀏覽:163