PHP数组没有正确地从php文件中提取数据

时间:2014-03-10 18:59:32

标签: php html arrays

我对这段代码感到有点困惑。它在一个不同的网站上“之前”工作但现在由于某种原因它不适用于我正在研究的这个新工作。我有一个单独的PHP文件,我将元标题,元描述,元关键字,h1,h2标签存储为数组。该网站应该将该信息提取为变量,然后将其放置在代码中的正确位置。以下代码如下:

网站根文件夹中的SEO.PHP文件

        <?php
       $meta['INDEX']['title']            = "Title";
       $meta['INDEX']['keywords']         = "keywords";
       $meta['INDEX']['description']      = "description";
       $meta['INDEX']['H1']            = "h1";
       $meta['INDEX']['H2']            = "h2";

       $meta['ABOUT']['title']            = "About Company";
       $meta['ABOUT']['keywords']         = "kwd1, kwd2, kwd3";
       $meta['ABOUT']['description']      = "About company description";
       $meta['ABOUT']['H1']            = "h1 title";

       $meta['SERVICES']['title']         = "About Company";
       $meta['SERVICES']['keywords']      = "kwd1, kwd2, kwd3";
       $meta['SERVICES']['description']   = "About company description";
       $meta['SERVICES']['H1']             = "h1 title";

       $meta['BLOG']['title']              = "About Company";
       $meta['BLOG']['keywords']           = "kwd1, kwd2, kwd3";
       $meta['BLOG']['description']       = "About company description";
       $meta['BLOG']['H1']                 = "h1 title";
     ?>

INDEX.PHP中的代码示例

    <?php 
      include 'seo.php'; 
      $page_index = array_keys($meta);
      foreach($page_index as $page)
     {
       if ( strpos( strtoupper($_SERVER['REQUEST_URI']), $page ) !== false)
     {
       $title        = $meta[$page]['title'];
       $keywords     = $meta[$page]['keywords'];
       $description = $meta[$page]['description'];
       $h1           = $meta[$page]['H1'];
       $h2           = $meta[$page]['H2'];
       break;
      }
      } ?>

      <!DOCTYPE HTML>
      <html>
       <head>
         <meta charset="UTF-8" /> 
         <title><?php echo $title; ?></title>
         <meta name="description" content="<?php echo $description; ?>">
         <meta name="keywords" content="<?php echo $keywords; ?>">

以下是从各种变量中打印出的用于故障排除的内容。

  print_r ($page_index);
Array ( [0] => INDEX [1] => ABOUT [2] => SERVICES [3] => BLOG )


print_r($meta);
Array ( [INDEX] => Array ( [title] => Plumbers in Birmingham, AL | Birmingham Plumbers 
[keywords] => Plumbers in Birmingham AL, Birmingham Plumbers, Plumbers Birmingham AL, 
Plumber Birmingham AL, Plumbing Birmingham Al, Hoover Plumbing, Plumbers in Hoover Al 
[description] => Plumbers in Birmingham, AL - Servicing Mountain Brook, Vestavia 
Hills, Hoover, Pelham, Alabaster, Helena, Homewood and more locations. [H1] => The 
Best Plumbers in Birmingham, AL [H2] => 24 Hour Emergency Plumbing Service ) [ABOUT] 
=> Array ( [title] => About Company [keywords] => kwd1, kwd2, kwd3 [description] => 
About company description [H1] => h1 title ) [SERVICES] => Array ( [title] => About 
Company [keywords] => kwd1, kwd2, kwd3 [description] => About company description [H1] 
=> h1 title ) [BLOG] => Array ( [title] => About Company [keywords] => kwd1, kwd2, 
kwd3 [description] => About company description [H1] => h1 title ) )

这些根本没有打印......

print_r ($title);
print_r ($keywords);
print_r ($description);
print_r ($h1);
print_r ($h2);

最后......

print_r ($page);

显示BLOG

所以,我可以看到代码正在读取php文件并且可以读取数组,如元和页面索引所示。

但它正在打破变量和页面。由于这是在索引页面而不是博客页面上测试的 - 但它返回了博客。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

有很多方法可以执行此操作(使用$_SERVER['SCRIPT_NAME']尝试$_SERVER['PHP_SELF']basename()

if ( strpos( basename(strtoupper($_SERVER['SCRIPT_NAME'])), $page ) !== false)

或者也许:

if ( strpos( basename(strtoupper($_SERVER['PHP_SELF'])), $page ) !== false)

或者提供您可以尝试的默认值(可能会调整您在此处使用的$_SERVER var):

$page_index = array_keys($meta);
$vars = $meta['INDEX'];

foreach($page_index as $page){
    if ( strpos( strtoupper($_SERVER['REQUEST_URI']), $page ) !== false) {
        $vars = $meta[$page];
        break;
    }
}
$title        = $vars['title'];
$keywords     = $vars['keywords'];
$description  = $vars['description'];
$h1           = $vars['H1'];
$h2           = $vars['H2'];

//could possibly use extract($vars); instead

答案 1 :(得分:0)

检查您的修补程序是否正确,检查index.php中print(__FILE__); print($_SERVER['DOCUMENT_ROOT']);的输出。

尝试使用__FILE__pathinfo构建路径。可能需要realpath来确保路径结构。

最好不要简单地在文件中设置$ meta,而是返回生成的内容数组,如:      阵列(             'title'=&gt; '标题文字',             'kexwords'=&gt; 'kexwords text',             'description'=&gt; '描述文字',             // ...         )         '关于'=&gt;阵列(             'title'=&gt; '标题文字',             'kexwords'=&gt; 'kexwords text',             'description'=&gt; '描述文字',             // ...         )         'SERVICES'=&gt;阵列(             'title'=&gt; '标题文字',             'kexwords'=&gt; 'kexwords text',             'description'=&gt; '描述文字',             // ...         )         // ...     );

和其他文件

<?php
//file index.php
$meta = include( $_SERVER['DOCUMENT_ROOT'] . '/seo.php' );

两种方式都应该很难。