问题列表 - 第36488页

在PHP应用程序中存储系统配置的最佳方式(编码方式)是什么?

注意:配置保存在PHP文件中config.php.

我已经看到了不同的做法,这里是一个简短的示例列表(我在这些示例中存储数据库信息):

常数:全局,只读

define('DB_USER','user12');
define('DB_PASS','21user');
Run Code Online (Sandbox Code Playgroud)

使用GLOBALS数组:全局,可变,重复,与其他全局变量混合

$GLOBALS['DB_USER']='user12';
$GLOBALS['DB_PASS']='21user';
Run Code Online (Sandbox Code Playgroud)

使用非全局数组但提升了globaly:可能比第二个选项更差

$config=array(); ...

$config['DB_USER']='user12';
$config['DB_PASS']='21user';

... global $config;
    mysql_connect('localhost',$config['DB_USER'],$config['DB_PASS']);
Run Code Online (Sandbox Code Playgroud)

定义类属性:(全局,可枚举)

class Config {
    public $DB_USER='user12';
    public $DB_PASS='21user';
}
Run Code Online (Sandbox Code Playgroud)

标准/选项/特点:

  • 编码的简易性:您不希望检查设置是否存在或初始化
  • 易于修改:非程序员/外行可以轻松修改设置
  • 存放在干净的地方:不与其他变量混合(可以存储在子数组中)
  • 运行时修改:在某些情况下,其他开发人员可以轻松修改现有设置

在系统运行期间可能需要更改配置,因此选项1已不可行.第三种选择也不太干净.


在写这篇文章的时候,我对主观和封闭的讨论发出了重大警告.因此,继续关注主题,并给出有效的理由来解答您的问题.


这是一个非常明显的问题,考虑到我对不同的答案非常熟悉,你可能会问,为什么我要大惊小怪呢?问题是,我正在开发一个框架,并且与另一个框架(*ahem*joomla*ahem*)不同,我不想通过他们错误的投掷错误信息的解决方案,最终必须更改/在将来重新定位.


编辑:首先,配置文件的位置与我无关.如果他们愿意,我会确保人们可以轻松更改位置,但这不是必需的.首先,廉价的虚拟主机不允许这样做,其次,就安全性而言,这真的不是一个好的选择.为什么?因为,框架需要知道配置的位置.真的,通过默默无闻的安全措施不起作用.我宁愿修复所有RFI和XSS(例如),而不是偏执地将配置文件隐藏在多个层下.

php config system

7
推荐指数
1
解决办法
1254
查看次数

维基百科的解析器

我下载了一个维基百科转储,我想将维基格式转换为我的对象格式.是否有可用的wiki解析器将对象转换为XML?

java mediawiki nlp wikipedia nsxmlparser

13
推荐指数
1
解决办法
8465
查看次数

php mysql_connect安全性

如果Web服务器和数据库服务器位于不同的主机上,那么当您在PHP代码中使用mysql_connect时,黑客是否可以进行数据包嗅探或使用其他方法获取数据库用户名/密码?

php mysql security encryption cryptography

4
推荐指数
1
解决办法
1393
查看次数

C++中成员函数的内存分配

#include<iostream>
using namespace std;
class A
{

};
class B
{
        public:
                void disp()
                {
                        cout<<" This is not virtual function.";
                }
};
class C
{
        public:
                virtual void disp()
                {
                        cout<<"This is virtual function.";
                }
};
int main()
{
        cout<<"class A"<<sizeof(A)<<endl;
        cout<<"class B"<<sizeof(B)<<endl;
        cout<<"class C"<<sizeof(C)<<endl;
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

sizeof类A和类B都只是1个字节.B中成员函数disp的内存分配是什么

c++

11
推荐指数
1
解决办法
9162
查看次数

不发生隐式转换

我问的最后一个问题是我在试图理解另一件事时偶然发现的事情......我也无法理解(不是我的一天).

这是一个很长的问题陈述,但至少我希望这个问题可能对许多人有用,而不仅仅是我.

我的代码如下:

template <typename T> class V;
template <typename T> class S;

template <typename T>
class V
{
public:
 T x;

 explicit V(const T & _x)
 :x(_x){}

 V(const S<T> & s)
 :x(s.x){}
};

template <typename T>
class S
{
public:
 T &x;

 explicit S(V<T> & v)
 :x(v.x)
 {}
};

template <typename T>
V<T> operator+(const V<T> & a, const V<T> & b)
{
 return V<T>(a.x + b.x);
}

int main()
{
 V<float> a(1);
 V<float> b(2);
 S<float> c( b );

 b …
Run Code Online (Sandbox Code Playgroud)

c++ templates implicit-conversion

7
推荐指数
2
解决办法
1292
查看次数

如何测试给定类型是否是静态类?

var types=from m in System.Reflection.Assembly.Load("System").GetTypes()
                  where m.IsClass
                  where // something to check whether or not the type is a static class.
                  select m;
Run Code Online (Sandbox Code Playgroud)

我想从我的结果中填写任何静态类.

c#

3
推荐指数
1
解决办法
132
查看次数

Google App Engine Python:sys.path.append无法在线工作

我有这个

import sys
sys.path.append('extra_dir')
import extra_module
Run Code Online (Sandbox Code Playgroud)

它在Windows XP App Engine SDK下完美运行(离线)

但是当在线部署时,它给了我<type 'exceptions.ImportError'>,我在网上部署它时缺少什么?

google-app-engine

1
推荐指数
1
解决办法
860
查看次数

如何在oracle中创建只读数据库链接

考虑以下场景....

我有一个主用户MASTER.

我有一个测试用户TEST.

对于两个用户,表结构是相同的.两个用户都可以在不同的oracle服务器上.

然后我通过使用以下命令以test用户身份登录到sql plus来创建数据库链接作为master_link

创建数据库链接master_link通过密码使用连接到主机(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.9.139)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))

通过以测试用户身份登录并使用数据库链接名称,我可以修改主用户中的表.例如

update table1 @ master_link set display_title ='PONDS';

此查询更新主用户的表table1.

我的要求是我想给予数据库链接(master_link)的只读权限,以便测试用户不能使用数据库链接修改或插入主用户的任何表.

oracle

4
推荐指数
1
解决办法
2万
查看次数

qrcode 生成器使用 python for windows

我正在寻找 python 窗口版本的 qrcode 生成器。谁能帮我找出来。

我什么都没有。

请帮我。

谢谢,马努

python qr-code

5
推荐指数
1
解决办法
7785
查看次数

如何模拟Capybara中的浏览器后退按钮?

我们的电子商务网站上存在一个问题,即用户偶尔会两次点击"结帐",并且会对其卡进行两次充值.

这是一个常见的错误,容易修复,但我想在我们的水豚设置中测试解决方案.一旦我调用click_button('checkout'),我是否可以假装我是用户点击浏览器后退按钮然后再次调用click_button('checkout')?

ruby testing ruby-on-rails capybara

30
推荐指数
4
解决办法
1万
查看次数