2015-12-21 68 views
0

我大量生产非常类似的网站,这意味着它们都使用相同的基本组件,页面,并且都是单一行业特定的。这些是我的低端深度折扣网站设计。这些网站每天都没有超过20-30位访问者,所以服务器上的任何额外负载都不是问题。使用define()进行大规模建设时,优点?缺点?

为了时间的利益,他们都使用相同的组件,虽然它们可能位于不同的位置或者顺序不同,但我想写一个可以包含在每个站点中的定义文件,所以我可以只需调用定义的常量,而不是每年在构建的每个站点上编写几百次代码。此外为了编辑后期的目的,这将使我的生活更轻松。

定义文件将类似于以下内容:

define('UPCONTACT','<h1>Contact Us</h1>'); 
define('ULCONTACT','<a href="contact_us.php">Contact Us</a>'); 
define('UPABOUTUS','<h1>About Us</h1>'); 
define('ULABOUTUS','<a href="about_us.php">About Us</a>'); 

显然,这是一个非常简单的例子,但我认为你的想法。

所以问题是以这种方式使用define()的优缺点是什么?

+1

我认为不是使用常量,而是创建模板要容易得多。另外,您必须选择将其修改为行 – Ibu

+0

我实际上正在考虑将其用作我的模板系统的一部分。 – user3154948

回答

1

这是非常好的。缺点是,由于您使用的是常量,因此无法为单个页面或网站覆盖它们。

使用数组来代替:

config.php

return array(
    'aboutus' => '<h1>About Us</h1>', 
    'contactus' => '<a href="contact_us.php">Contact Us</a>' 
); 

包括像这样在您的网站:

$config = include('config.php'); 

然后你就可以打印很容易

<?php echo $config['aboutus'] ?> 

您还可以在需要时更改数值:

$config = include('config.php'); 
$config['aboutus'] = '<h1>About My Company</h1>'; 

这可能是您的最佳选择。

+0

是的,我更喜欢这个!更有意义,它可以编辑!谢谢! – user3154948

+0

谢谢你接受我的回答:) – tacone

0

它有上涨和下跌。

好处在于,这种方式比从数据库加载设置(并创建数据库;创建抽象层...)要快。

缺点在于这种方式不能由客户端定制。如果他们需要更改,请事先确保该网站是静态的,并且每次更改都会收取费用。

恕我直言,最好有一些东西由客户端定制,而其他东西不是。但是,通过以这种方式使用define()(除了可能允许的数据类型),没有任何技术问题。

+0

这些网站大部分是静态的,除了事件页面外,其中的“管理”区域与WP张贴页面类似。我想我可以向管理员添加另一部分的个人信息,位置,联系信息,电子邮件地址等。这实际上很简单。 – user3154948

0

一个更好的方式来使用ini文件或类似的东西。 (从智能手机轻松地编辑,如果它是一个递归任务,为您:)

寻找一个内建PHP函数,可以简化你的生活

http://php.net/manual/fr/function.parse-ini-file.php

,或者你会更强大,灵活的系统, 随时随地模板(找智者,或自制的正则表达式的模板)

寻找我的第一个正则表达式函数(龙年前) Quitting Smarty to do it manually

注:

使用常数不提供你动态修改它们 内嵌代码,并且是穷人支持的类型(你不能存储,而不连载例如数组)

0

我建议级联INI文件:

$conf_dir = dirname(__FILE__); 
$config = array_merge_recursive(
    parse_ini_file($conf_dir.'base.ini'), 
    parse_ini_file($conf_dir.'client.ini') 
); 

的好处是可读性,执行无力(我想锁定下来的东西,可以是),你可以在git跟踪base INI(或任何你使用)而不是客户端。有一些缺点,但这就是生活。可以肯定,感觉更干净,但它们不会比.php更快。

如果你想消除任何冗余执行(听,任何“性能优势”仍然有其“利”),系列化:

<?php 

define('CACHE_DIR', '/tmp/'); 
// where 'http' is a path part that directly follows the app root, and will always 
// be below where this file is called from. 

$ini_cache = CACHE_DIR.'config.ser'; 

if(!file_exists($ini_cache)) { 
    // Build your config in any way you wish. 
    $conf_dir = dirname(__FILE__); 
    $config = array_merge_recursive(
     parse_ini_file($conf_dir.'base.ini'), 
     parse_ini_file($conf_dir.'client.ini') 
    ); 
    // Store it serialized 
    file_put_contents($ini_cache, serialize($config)); 
} else { 
    $config = deserialize(file_get_contents($ini_cache)); 
} 

你可以得到这更有创意,但本质上,这允许您以任何您希望的方式存储/生成您的配置。如果你想不必删除每一个变化的序列缓存,你可以添加一个atime检查:

<?php 

define('CACHE_DIR', '/tmp/'); 
// where 'http' is a path part that directly follows the app root, and will always 
// be below where this file is called from. 

$ini_cache = CACHE_DIR.'config.ser'; 
$conf_dir = dirname(__FILE__); 

$config = array(); 

if(file_exists($ini_cache)) { 
    $client_stat = stat($conf_dir.'client.ini'); 
    $cache_stat = stat($ini_cache); 

    if($client_stat['atime'] < $cache_stat['atime']) { 
     $config = deserialize(file_get_contents($ini_cache)); 
    } 
} 

if(empty($config)) { 
    // Build your config in any way you wish. 
    $config = array_merge_recursive(
     parse_ini_file($conf_dir.'base.ini'), 
     parse_ini_file($conf_dir.'client.ini') 
    ); 
    // Store it serialized 
    file_put_contents($ini_cache, serialize($config)); 
} 

无论使用哪种序列化方法,可以使用以往$config生成方案,你喜欢什么,如果你使用PHP ,你甚至可以获得真正的创意/复杂,并且缓存命中到页面将是微不足道的。