/**
* @file
* Drupal站点配置文件
*
* 注意:
*
* 这个文件应该会被Drupal安装器设置为只读。
* 如果对该文件进行编辑,编辑完成后必须重新设置为只读,否则将成为安全隐患。
*
* 这个配置文件会依照下面的规则进行载入。
* 然而如果存在多站点别名文件sites/sites.php,则会被优先载入,
* $sites中的别名会覆盖缺省的目录规则。
* 参考sites/example.sites.php获取更多别名相关的内容。
*
* 配置目录的获取:
* 从左到右剥掉站点的主机名
* 从右向左去掉路径名
* 找到一个文件名就会忽略其他的配置文件。
* 如果没找到,则使用缺省的sites/default。
*
* 例如一个安装在http://www.drupal.org:8080/mysite/test/的站点,
* 会在下面的目录搜索settings.php文件:
*
* – sites/8080.www.drupal.org.mysite.test
* – sites/www.drupal.org.mysite.test
* – sites/drupal.org.mysite.test
* – sites/org.mysite.test
*
* – sites/8080.www.drupal.org.mysite
* – sites/www.drupal.org.mysite
* – sites/drupal.org.mysite
* – sites/org.mysite
*
* – sites/8080.www.drupal.org
* – sites/www.drupal.org
* – sites/drupal.org
* – sites/org
*
* – sites/default
*
* 注意如果安装在一个非标准端口号上,这个端口会在前缀中体现,例如
* http://www.drupal.org:8080/mysite/test/
* 可以在
* sites/8080.www.drupal.org.mysite.test/载入。
*
* @see example.sites.php
* @see conf_path()
*/
/**
* 数据库配置:
*
* $database数组指定了Drupal正在以及可能使用的数据库连接。
* Drupal可以在一次请求中连接多个数据库,包括多种不同的数据库。
*
* @code
* array(
* ‘driver’ => ‘mysql’,
* ‘database’ => ‘databasename’,
* ‘username’ => ‘username’,
* ‘password’ => ‘password’,
* ‘host’ => ‘localhost’,
* ‘port’ => 3306,
* ‘prefix’ => ‘myprefix_‘,
* ‘collation’ => ‘utf8_general_ci’,
* );
* @endcode
*
* “driver” 属性用于描述该数据库所使用的Drupal数据库驱动。一般来说他的取值等同于数据库类型,例如mysql或者sqlite,当然,也有例外。
* 其他的属性依赖于驱动。对SQLite来说,必须指定一个Web服务器可访问的数据库文件全名。
* 其他数据库一般要指定用户名、密码、地址以及数据库名称。
*
* 缺省情况下,所有支持事务的数据库类型都会默认打开事务支持,其中包含MySQL。
* 设置’transactions’键为FALSE,可以显式的关闭这一特性。
* 注意MySQL的某些配置,例如MyISAM引擎,是不支持事务的,所以即使开启了事务,也不会生效。
* 如果事务特性造成了站点崩溃,可以尝试关闭事务开关。
*
* 每个database都可以指定多个’目标’数据库。
* 一个目标数据库允许Drupal尝试把某些查询发送到不同的数据库,如果失败的话,会回到缺省连接。
* 这对主从复制结构的数据库很有用,Drupal会在恰当时机尝试连接到从服务器,如果从服务器不可用,则会回退到主服务器。
*
* 一般的配置方式如下所示:
*
* @code
* $databases[‘default’][‘default’] = $info_array;
* $databases[‘default’][‘slave’][] = $info_array;
* $databases[‘default’][‘slave’][] = $info_array;
* $databases[‘extra’][‘default’] = $info_array;
* @endcode
*
* 在上面的例子中,$infoarray是一个上面描述的数组。
* 第一行用第二维的’default’设置主服务器为缺省服务器。
* 第二三行创建了从数据库数组。Drupal会在请求中进行随机选择。
* 最后一样创建了一个新的名为”extra”的数据库
*
* 如果是单服务器配置,下面的内容就足够了。
*
* @code
* $databases[‘default’][‘default’] = array(
* ‘driver’ => ‘mysql’,
* ‘database’ => ‘databasename’,
* ‘username’ => ‘username’,
* ‘password’ => ‘password’,
* ‘host’ => ‘localhost’,
* ‘prefix’ => ‘main’,
* ‘collation’ => ‘utf8_generalci’,
* );
* @endcode
*
* 可以利用”prefix”为部分或全部数据表设置前缀。
* 如果prefix有值,数据表名称会在前面加上这个前缀。
* 所以prefix必须是mysql允许的字符构成,一般就是数字、字母和下划线。
* 如果不指定前缀,则赋值为“”。
*
* 要让所有的数据库名字具有同一个前缀,设置”prefix”为字符串:
*
* @code
* ‘prefix’ => ‘main’,
* @endcode
*
* 要让特定表使用特定前缀,可以将”prefix”赋值为数组。
* 数组的键为表名,值为前缀。
* ‘default’是必须的,代表所有未特别制定前缀的其他表的前缀。
* 例如:
*
* @code
* ‘prefix’ => array(
* ‘default’ => ‘main’,
* ‘users’ => ‘shared’,
* ‘sessions’ => ‘shared’,
* ‘role’ => ‘shared’,
* ‘authmap’ => ‘shared_‘,
* ),
* @endcode
*
* 还可以使用schema/database作为前缀。
* 如果Drupal使用用了非缺省的数据库,或者用户需要同时访问几个database,这种配置就很有用了。
* 例如:
*
* @code
* ‘prefix’ => array(
* ‘default’ => ‘main.’,
* ‘users’ => ‘shared.’,
* ‘sessions’ => ‘shared.’,
* ‘role’ => ‘shared.’,
* ‘authmap’ => ‘shared.’,
* );
* @endcode
*
* 注意:MySQL和SQLite的定义中,Schema就是一个数据库。
*
* 高级用户可以像PDO连接设置那样,添加或覆盖连接到数据库服务器时执行的命令。
* 例如,增大MySQL的max_join_size这一系统变量,并把超时时间降低到5秒钟:
*
* @code
* $databases[‘default’][‘default’] = array(
* ‘init_commands’ => array(
* ‘big_selects’ => ‘SET SQL_BIG_SELECTS=1’,
* ),
* ‘pdo’ => array(
* PDO::ATTR_TIMEOUT => 5,
* ),
* );
* @endcode
*
* 警告:缺省值都是为保障数据库的通用性设置的。
* 修改缺省值可能会导致不期望的结果,甚至引起数据丢失。
*
* @see DatabaseConnection_mysql::construct
* @see DatabaseConnection_pgsql::construct
* @see DatabaseConnection_sqlite::__construct
*
* 数据库配置格式:
*
* @code
* $databases[‘default’][‘default’] = array(
* ‘driver’ => ‘mysql’,
* ‘database’ => ‘databasename’,
* ‘username’ => ‘username’,
* ‘password’ => ‘password’,
* ‘host’ => ‘localhost’,
* ‘prefix’ => “,
* );
* $databases[‘default’][‘default’] = array(
* ‘driver’ => ‘pgsql’,
* ‘database’ => ‘databasename’,
* ‘username’ => ‘username’,
* ‘password’ => ‘password’,
* ‘host’ => ‘localhost’,
* ‘prefix’ => “,
* );
* $databases[‘default’][‘default’] = array(
* ‘driver’ => ‘sqlite’,
* ‘database’ => ‘/path/to/databasefilename’,
* );
* @endcode
*/
$databases = array();
/**
* update.php的访问限制
*
* 如果你没有登录,或者登录账号并非初始的管理员,也不具备“管理软件更新”的权限。
* 在这种情况下要更新系统,就需要修改下面的语句。
* 把FALSE改为TRUE就可以禁用访问限制。
* 在更新完成之后,需要确认把TRUE改回FALSE。
*
*/
$update_free_access = FALSE;
/**
*
* 用于一次性登录以及取消的连接,form token等的SALT
*
* 这一变量会在系统安装时被初始化为一个随机值。
* 如果这个值发生变化,则所有一次性登录连接都会失效。
* 如果站点被部署到集群环境下,务必保证各个服务器的这一变量完全一致。
* 如果这个值为空,则会使用数据库登录凭证的序列化结果作为缺省值。
*
* 为了增强安全性,可以从一个Drupal目录之外的文件来读取这个配置,
* 这一文件的保存也应该同Drupal和数据库的备份分开。
*
* 例如:
* $drupal_hash_salt = file_get_contents(‘/home/example/salt.txt’);
*
*/
$drupal_hash_salt = “;
/**
* Base URL (可选).
*
* 如果Drupal在你的站点上生成了错误的网址,例如HTML头部的CSS/JS文件,或者页面菜单的连接。
* 可以启用这一选项,取值为Drupal安装URL。
*
* 你可能还想强制用户使用一个指定的域。
* 可以在.htaccess文件来获取更多信息
*
* 例如:
* $base_url = ‘http://www.example.com’;
* $base_url = ‘http://www.example.com:8888′;
* $base_url = ‘http://www.example.com/drupal’;
* $base_url = ‘https://www.example.com:8888/drupal’;
*
* 不要在末尾加入斜线,Drupal会自动添加。
*
*/
$base_url = ‘http://www.example.com’; // NO trailing slash!
/**
* PHP设置:
*
* 这里允许设置的范围,包括这些内容是否可以在运行时进行设置,请阅读PHP文档:
* http://www.php.net/manual/ini.list.php
* 参考include/bootstrap.inc中的drupal_environment_initialize(),这里规定了必须进行设置的内容。
* .htaccess文件中包含了非运行时的设置内容。
* 这里的设置不要重复,以免发生冲突。
*
*/
/**
*
* 有些Linux发行版(比如Debian)会禁用PHP的垃圾搜集(gc)。
* 而Drupal需要垃圾收集特性用于Session清理,所以这里需要特别设置。
*
*/
ini_set(‘session.gc_probability’, 1);
ini_set(‘session.gc_divisor’, 100);
/**
*
* Session的存活期,单位是秒。
* 用户最后一次访问活动会话的后,到Session被垃圾收集删除的时间。
* 当Session被删除,用户会被登出,用户的$_SESSION中保存的内容也会被废弃。
*
*/
ini_set(‘session.gc_maxlifetime’, 200000);
/**
* Cooke存活期,单位是秒。
* 也就是Session的创建到Cookie过期的时间段,也就是浏览器丢弃Cookie的时间。
* 如果设置为“0”,则代表“直到浏览器关闭”。
*/
ini_set(‘session.cookie_lifetime’, 2000000);
/**
*
* 如果存在如下情况:
* 用户发布了大文本,结果展示的内容被截断,但是仍然可以编辑。
* 这可能是因为Drupal的输出过滤器运行内存不足无法处理。
*
* 遇到这种情况,可以考虑启用下面两行代码,增大这两个变量的值,更多信息可参考:
* http://php.net/manual/pcre.configuration.php.
*
*/
ini_set(‘pcre.backtrack_limit’, 200000);
ini_set(‘pcre.recursion_limit’, 200000);
/**
*
* Drupal自动为站点生成一个基于完整域名的唯一的Session Cookie名。
* 如果你有多个域名指向同一个Drupal站点,
* 你可以把所有访问重定向到单独的一个域名(参见.htaccess中的注释);
* 或者启用下面的行,指定他们共享的父域名。
* 这样可以保障用户登录的Session能在各个域中都有效。
* 遵循RFC 2109的规定,取值必须以“.”开头。
*
*/
$cookie_domain = ‘.example.com’;
/**
* 变量覆盖:
*
* 这一段可以用来覆盖变量表中的内容。
* 这个特性很少用到。
* 对于vhost或者目录来说这个配置比较有用。
* 变量表中的所有内容都可以在这里设置为新的值。
* 另外,这里指定的变量值,在管理界面的修改是无效的。
*
* 例如:
* – site_name: 缺省的站点名称。
* – theme_default: 该站点的缺省主题。
* – anonymous: 匿名用户的可读名称。
*
*/
$conf[‘site_name’] = ‘My Drupal site’;
$conf[‘theme_default’] = ‘garland’;
$conf[‘anonymous’] = ‘Visitor’;
/**
*
* 可以为离线页面设置一个主题。
* 当站点被设置为维护模式,或者数据库离线时,这个配置就有用了。
* 模板文件必须拷贝到主题中。名称为’modules/system/maintenance-page.tpl.php’。
* 注意:这一设置对更新和安装不起作用。
*
*/
$conf[‘maintenance_theme’] = ‘bartik’;
/**
* 反向代理配置:
* 反向代理服务器经常用于增强大负载网站的性能,同时提供额外的站点缓存、安全等好处。
* 如果Drupal部署反向代理服务器之后,Drupal的日志、统计以及访问控制系统都需要获取真实的用户IP。
* 通常反向代理服务器会在请求中添加X-Forwarded-For头,用于传递客户IP地址。
* 然而,HTTP头对于客户端欺诈来说是很脆弱的,有些客户端能够直接生成这个Header信息。
* 所以,Drupal需要在$conf[‘reverse_proxy_address’]中设置所有的代理服务器地址。
*
* 激活这个设置让Drupal可以从X-Forwarded-For头中获取用户的IP地址。
* 这个Header的名字也可以通过$conf[‘reverse_proxy_header’]修改为其他名称。
* 如果你不确定是否使用了反向代理,不知道这个选项的含义,或者站点托管在共享主机上,就不必设置。
*
* 启用这个配置,就必须把每个反向代理服务器的地址都保存在$conf[‘reverse_proxy_addresses’]中。
* 如果你的环境中无法获取一个完整的反向代理服务器列表(例如CDN)。可以在settings.php中直接设置$_SERVER[‘REMOTE_ADDR’]。
* 这意味着可能发生IP伪造。
*/
$conf[‘reverse_proxy’] = TRUE;
/**
* 如果$conf[‘reverse_proxy’]设置为TRUE,这里必须列出所有的代理服务器
*/
$conf[‘reverse_proxy_addresses’] = array(‘a.b.c.d’, …);
/**
* 如果你用于传递IP的HTTP头不是X-Forwarded-For,则需要在这里进行设置。
*/
$conf[‘reverse_proxy_header’] = ‘HTTP_X_CLUSTER_CLIENT_IP’;
/**
* 页面缓存:
*
* 缺省情况下,Drupal会为匿名用户的访问发送一个“Vary: Cookie”的HTTP头。
* 这会指示HTTP代理服务器,如果用户在访问一个被缓存页面时,如果他发送了同最初访问缓存页面的用户同样的Cookie头,
* 可以无需联系Web服务器,直接从本地缓存中返回一个页面。
* 如果没有“Vary Cookie”,登录用户也会以同样的方式从缓存中获取页面。
* 如果站点绝大多数用户都是匿名用户,极少有编辑和管理活动,这个Vary头可以省略。
* 这对HTTP代理服务器的缓存有很好的帮助(也包括反向代理),
* 也就是说,开启这一配置,即使用户发送了不同的Cookie,仍然会从代理服务器缓存中获取内容。
* 然而这样的话,登录用户应该直接访问服务器(也就是说不通过代理和反向代理服务器),以防从缓存中获取不恰当的内容。。
*
*/
$conf[‘omit_vary_cookie’] = TRUE;
/**
* CSS/JS 聚合文件压缩:
*
* 缺省情况下,当CSS和JS聚合以及简洁连接被启用的时候,Drupal会保存gzip压缩的聚合文件。
* 如果这个文件可用,则.htaccess中的rewrite规则会把这个文件传送给支持gzip压缩内容的浏览器。
* 这使得用户能够更快的载入页面,并降低服务器压力。
* 如果你用的不是Apache,或者前端部署了具备缓存和压缩能力的反向代理服务器,可能就要启用下面两行代码,
* 阻止保存gzip文件。
*
*/
$conf[‘css_gzip_compression’] = FALSE;
$conf[‘js_gzip_compression’] = FALSE;
/**
* 块缓存:
*
* 实现Block的模块会指定该Block的缓存策略,可能导致块缓存同node access并不兼容。
* 缺省情况下,Drupal会在一个或者更多模块实现了hook_node_grants()的情况下,禁用块缓存。
* 如果认为块缓存很安全,希望跳过这个限制,启用下面这行代码。
*
*/
$conf[‘block_cache_bypass_node_grants’] = TRUE;
/**
* 字符串覆盖:
* 不管站点是否启用了Locale模块,都可以在这里覆盖指定的字符串。
* 这个功能让用户可以改变少量的缺省英文界面字符串。
*
*/
$conf[‘locale_custom_strings_en’][“] = array(
‘forum’ => ‘Discussion board’,
’@count min’ => ‘@count minutes’,
);
/**
*
* IP屏蔽:
* 使用这个设置,可以跨过数据库中对屏蔽IP地址的查询。
* 缺省情况下,Drupal在每次页面请求的过程中,不管是登录还是未登录用户,都会查询{blocked_ips}表。
* 这个表让管理员可以通过管理界面管理IP地址的屏蔽,并且在所有模块载入之前生效。
* 然而在重负载的网站中,你可能想声调这一步,这个配置允许你在某些缓存配置下,对匿名用户跳过数据库访问。
*
* 如果使用这一设置,需要把所有要屏蔽的IP地址加入到这里。数组的每一项都是一个IP。
*
* 如果给这个配置赋值为空数组,则代表着禁用IP屏蔽功能。
*
*/
$conf[‘blocked_ips’] = array(
‘a.b.c.d’,
);
/**
* 快速404页面:
*
* Drupal能够生成完整主题渲染的404页面。然而,这类相应中的一些图片或者其他资源可能没必要显示给用户。
* 这造成了对带宽和服务器负载的浪费。
*
* 下面的选项,在URL符合下面模式的情况下,生成一个简单的快速的404页面:
* – 404_fast_paths_exclude: 一个用于描述排除某些路径的正则表达式,例如image styles生成、或者动态大小的图片。
* 如要添加更多排除项目,可以添加“|path”到表达式中。
* – 404_fast_paths: 正则表达式,符合这一模式的URL将直接返回快速的简单的404页面,而不是主题渲染的页面。
* 如果不存在任何’htm’或者’html’的别名,可以在表达式中添加“|s?html?”。
* – 404_fast_html: 404页面的HTML内容。
*
*/
$conf[‘404_fast_paths_exclude’] = ‘//(?:styles)//‘;
$conf[‘404_fast_paths’] = ‘/.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i’;
$conf[‘404_fast_html’] = ‘-//W3C//DTD XHTML+RDFa 1.0//EN” “http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd”>
Not Found
The requested URL “@path” was not found on this server.
’;
/**
*
* 缺省情况下,页面请求在访问一个不存在的文件,
* 而且网址符合’404_fast_paths’的条件,而且不在’404_fast_paths_exclude’的范围中的场景中,
* 会返回一个快速的404页面。同时404错误也会被记录到Drupal日志系统中。
*
* 启用下面的语句,让你可以更早的(在settings刚载入时)返回404页面。这会降低404情况下的服务器负载,
* 并且不记录错误到日志中去。
* 为了防止有效的页面例如image style和其他生成内容返回404,必须把他们加入到’404_fast_paths_exclude’中。
* 在启用这个项目之前,务必确认对这个功能有了真正的了解。
*
*/
drupal_fast_404();
/**
* 外部代理服务器设置:
*
* 如果你的服务器必须通过Web服务器访问外部网络,则可以在这里输入代理服务器配置。
* 目前这里仅支持基于用户名和密码的基础验证。
* 如果代理服务器不对User-Agent头进行限制,proxy_user_agent可以设置为NULL。
* proxy_exceptions用于设置无需代理可以直接访问的站点。
*
*/
$conf[‘proxy_server’] = “;
$conf[‘proxy_port’] = 8080;
$conf[‘proxy_username’] = “;
$conf[‘proxy_password’] = “;
$conf[‘proxy_user_agent’] = “;
$conf[‘proxy_exceptions’] = array(‘127.0.0.1’, ‘localhost’);
/**
* 认证的文件系统操作:
*
* Update Manager模块提供了一种机制,让管理员可以安全的在站点上利用Web界面安装缺失的更新。
* 在安全的服务器上,Update Manager在执行升级操作之前,需要管理员提供SSH或者FTP登陆凭据。
* 让站点能够使用这些登陆凭据来访问整个Drupal站点的文件,而不受限于web server的运行用户。
*
* 如果webserver用户就是Drupal文件的拥有者,则无需SSH或FTP凭证(注意这类主机通畅是托管在共享环境中,天生的安全性低)。
*
* 有些站点可能希望关闭上面的功能,只允许通过SSH或者FTP进行升级。
* 这个设置会关闭所有认证文件更新的相关功能。
*
*/
$conf[‘allow_authorize_operations’] = FALSE;
文章来源于互联网:settings.php汉化