2016-03-25 9 views
-1

verwendet habe Ich versuche, um die Ansicht von Logikkonzept zu trennen anwenden. Mein Problem ist, dass meine Variable nicht in der Seite, die ich in file_get_contents verwendet habe, zugewiesen wurde.Meine Variable ist nicht in der Seite, die ich in file_get_contents

mein zugehöriger Code ist:

in meinem index.php:

... 

// analyze the url 
require_once("analyzeURL.php"); 

// load page contents 
require_once("page_contents.php"); 

// print page 
require_once("v_header.php"); 
echo $content; 
require_once("v_footer.php"); 
... 

in meinem page_contents.php:

... 
elseif (isset($is_valid_article_uri) AND $is_valid_article_uri === TRUE) 
// article uid variable: $article_id 
// I got this info as an output of `analyze the url` process 
{ 
    $page_title = ''; 
    $page_description = ''; 
    $page_author = ''; 
    $page_robots = ''; 

    $query = "SELECT `status`, `author`, `title`, `summary`, `sefd`, `content`, `categories`, `tags`, `publishdate` FROM `articles` WHERE `uid` = ? LIMIT 1"; 
    $sth = $dbh->prepare($query); 
    $sth->bindParam(1, $article_id, PDO::PARAM_INT); 
    $sth->execute(); 
    $article = $sth->fetch(PDO::FETCH_ASSOC); 
    $content = file_get_contents($content_root.'bd_unique_article.php'); 
} 

in meinem bd_unique_article.php:

<div> 
<?php echo $article["title"]; ?> 
</div> 

in einer gültigen Artikelseite uri, sagt PHP, dass $article Variable nicht definiert ist.

Meine Frage ist, was sind meine Optionen und welche Option wäre hier am sichersten, um dieses Problem zu umgehen, wenn ich nicht eval Befehl verwenden möchte? Während sagen sicherste meine ich stumm auf Server-Umgebung, die genau wie mit require_once Sie auch, dass Sie bemerken, $article Array viele Informationen hält. Meine Artikel sind wirklich lang.

Dank, Mit freundlichen Grüßen

+0

Können Sie eine 'print_r ($ article)' machen und die Antwort anzeigen? –

Antwort

0

file_get_contents Willen gibt das gleiche Ergebnis wie wenn Sie die Seite direkt (als ob über einen Web-Browser) geladen hatten. Auf dieser Seite wurde $article nicht festgelegt, daher ist die Ausgabe leer.

Wenn Sie möchten, dass der Inhalt sofort angezeigt wird, können Sie einfach include die Seite. Wenn Sie den Inhalt später anzeigen möchten, können Sie ob_start verwenden, um die Ausgabe zu puffern, include die Seite, dann ob_end_clean, um das Ergebnis abzurufen und zu speichern.

+1

'file_get_contents' gibt den ** rohen Inhalt der Datei ** zurück, es findet überhaupt keine Bewertung des Inhalts statt! – deceze

+0

@deceze - Wenn der Pfad ein Dateisystempfad ist, ja, aber es funktioniert auch auf URLs, die den Inhalt auswerten. Aus der Frage von OP ist nicht klar, worauf '$ content_root' hinweist. –

+0

Ich würde sehr hoffen, dass das OP liest eine lokale Datei anstelle von einem 'http: //' URI ... – deceze