0

PHP/MySQL を使用して、動的 css (style.php) を使用して Web アプリのスタイルを設定しています。

MySQL の値は URL から決定されます。

$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

if($url == "this") $style = "blue";
else( $style = "red"; )

私が抱えていると思われる問題は、style.php が以下を使用していることです。

header('Content-type: text/css');

これにより、$url は "http://" と等しくなり、style.php ファイルの外部で割り当てられた他の変数も無視されます。

これらの $_SERVER (およびその他の) 変数を機能させる方法を知っている人はいますか?

ここに完全なコードがあります

$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; // current URL

$key = true;

while($key){

mysql_select_db($database, $connection);
$query_rsTheme = "
SELECT      s.name, s.url, t.name as theme, t.colour, t.hover 
FROM        db_site as s
INNER JOIN  db_theme.theme as t ON t.name = s.theme
WHERE       s.url = '$url'";
$rsTheme = mysql_query($query_rsTheme, $connection) or die(mysql_error());
$row_rsTheme = mysql_fetch_assoc($rsTheme);
$totalRows_rsTheme = mysql_num_rows($rsTheme);

if($totalRows_rsTheme == 1){ // sucessful match
    $key = false;

    $site = $row_rsTheme['name'];
    $theme = $row_rsTheme['theme'];
    $default_state = $row_rsTheme['colour'];
    $hover_state = $row_rsTheme['hover'];
}

$tokens = explode('/', $url);
$remove = $tokens[sizeof($tokens)-2]."/";
$url = substr($url, 0, strpos($url, $remove));
}

header('Content-type: text/css');
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

$stylesheet = 'style.css';

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

echo $content;
4

3 に答える 3

1

空であると何度か言及して$_SERVERいますが、実際にはテストしていないと思います:

print_r($_SERVER);

いずれにせよ、style.phpスクリプトは特定のグローバル変数 (つまり$database$connection) が存在することを前提としています。完全なスクリプトを実際に投稿した場合、それらを定義することはありません。

あなたはまた言及します:

style.php ファイルの外部で割り当てられたその他の変数はすべて無視されます。

もちろん。これが PHP の仕組みです。各スクリプトは独立しています。ありがたいことstyle.phpに、同じサーバー上で実行される他のランダム スクリプトから変数を選択することはありません。

私のアドバイスは次のとおりです。

  1. 完全なエラー レポートを有効にします。通知や、場合によっては警告やエラーが表示されていないことは明らかです。

  2. スクリプトを個別にテストします。http://example.com/include/version-3/css/style.phpHTML に表示されるスタイルに頼るのではなく、ブラウザにロードして生成されたコードを確認してください。

于 2013-08-12T09:01:10.607 に答える
0

URIが特定の文字と一致するかどうかを確認できます

if (strpos($_SERVER['REQUEST_URI'], 'this') !== FALSE ){
    $style = "blue";
} else {
    $style = "red";
}

これは、使用しているファイルが実際に別のファイルへのインクルードである場合に特に役立ちます。

于 2013-08-12T08:55:13.357 に答える
0

問題はあなたが説明しているものではないと思います。style.phphttp 経由でアクセスされる限り、$_SERVER変数設定されます。

ただし、記述したコードには構文エラーがあります

if($url == "this") $style = "blue";
else( $style = "red"; )  // Incorrect syntax

正しい書き方は次のようになります。

if ($url == "this") { // $url will _never_ be "this"
    $style = "blue";
} else {
    $style = "red";
}

編集: MySQL の結果を評価するときに、ファンキーなコードがいくつかあります。

$row_rsTheme = mysql_fetch_assoc($rsTheme);
$totalRows_rsTheme = mysql_num_rows($rsTheme);

if($totalRows_rsTheme == 1){ // sucessful match, but ONLY if there's only one row
    ...
}

次のものに置き換える必要があります。

if($row_rsTheme = mysql_fetch_assoc($rsTheme)){ // sucessful match
    ...
}

そうすれば、結果が複数あっても成功します。

于 2013-08-12T08:39:11.723 に答える