Установить массив в одном файле php и получить доступ к другому файлу php - PullRequest
0 голосов
/ 14 марта 2012

Я использую этот код php код для записи моего css с заполненными переменными.

Я хочу переместить массив по умолчанию из этого кода и поднять его до settings.php файл для моего сайта, но когда я получаю это сообщение об ошибке:

<b>Warning</b>:  extract() [<a href='function.extract'>function.extract</a>]: First argument should be an array in <b>/home/drawapl1/public_html/ezamazon/demo/css/stylesheet.php</b> on line <b>19</b>

Мой код выглядит следующим образом:

в index.php:

<?php
include("settings.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link href="css/stylesheet.php" rel="stylesheet" type="text/css" media="screen" />

в файле stylesheet.php:

/* get the stylesheet */
$stylesheet = @is_file($_GET['stylesheet']) && strtolower(substr(strrchr($file_name,'.'),1)) == 'css' ? $_GET['stylesheet'] : 'global.css';

/* set the header information */
//will be output as css
header('Content-type: text/css');
//set an expiration date
$days_to_cache = 10;
header('Expires: '.gmdate('D, d M Y H:i:s',time() + (60 * 60 * 24 * $days_to_cache)).' GMT');

//red css variable information
//$red = array(
  //'body_font_size' => '10px',
  //'body_text_color' => '#f00'
//);

/* extract the propery array's information */
extract($_GET['theme'] && ${$_GET['theme']} ? ${$_GET['theme']} : $defaultCSS);

/* load in the stylesheet */
$content = preg_replace('/\$([\w]+)/e','$0',@file_get_contents($stylesheet));

/* spit it out */
echo $content;

в файле settings.php:

$defaultCSS = array( 'body_background_colour' => 'white', 'body_text_colour' => 'black', 'body_font_size' => '1em', 'body_font_family' => 'Arial, Helvetica, sans-serif', 'h1_text_colour' => 'black', 'h2_text_colour' => 'black', 'h3_text_colour' => '#E47911', 'a_text_colour' => '#004B91', 'a_hover_text_colour' => '#2A70FC', 'news_block_background_colour' => '#EAF3FE', 'left_nav_border_colour' => '#C9E1F4', 'left_nav_h2_background_colour' => '#EAF3FE', 'button_text_colour' => '#FFFFFF', 'button_background_colour' => '#414953', 'button_hover_background_colour' => '#999999', 'price_colour' => '#990000', 'price_heading_colour' => '#666666', 'nav_links_colour' => 'black', 'nav_hover_links_colour' => '#E47911', 'hr_divider_colour' => '#DDDDDD', 'pagination_highlight_colour' => '#645538' );

Есть идеи, в чем проблема?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

Включение settings.php в файл index.php и последующий вызов stylesheet.php из вашего html-документа не передаст переменные в файле settings.php в stylesheet.php

Необходимо включить settings.phpв файле stylesheet.php можно использовать его переменные.

РЕДАКТИРОВАТЬ

В index.php

<link href="css/stylesheet.php?vars=<?=urlencode(json_encode($defaultCSS))?>" rel="stylesheet" type="text/css" media="screen" />

в stylesheet.php добавитьвверху

$defaultCSS = json_decode(urldecode($_GET['vars']));

вы также можете использовать сериализацию / десериализацию вместо json_encode - но почему бы просто не включить его, гораздо чище сохранить все на стороне сервера

0 голосов
/ 14 марта 2012

Убедитесь, что вы используете include() для включения settings.php перед всем.

Наиболее вероятная причина, по которой это не работает, заключается в том, что файл не знает, видит переменную $default, исоздает новую переменную null для параметра.

Попробуйте это:

//settings.php

  /* set the dynamic information */
  //default css variable information
  $default = array(
    'body_font_size' => '16px',
    'body_text_color' => '#00f'
  );

//main_php_file.php

  include('settings.php'); // This is the important part

  /* extract the propery array's information */
  extract($_GET['theme'] && ${$_GET['theme']} ? ${$_GET['theme']} : $default);

Также попробуйте print_r($default) после include('settings.php');, чтобы убедиться, что $default установлен правильно.

...