2013-09-12 5 views
0

У меня есть три PHP файлы: engine.php, links.php и test.phpВключить и не работает должным образом ob_get_clean

В теории, когда я называю _insert() функцию в test.php он должен заменить строку с выходом links.php, вместо этого ob_start() и ob_get_clean() игнорируются, а вывод links.php просто эхом.

engine.php

function db() { 
    require("config.php"); 
    $conn = @mysql_connect($host, $uname, $pass) or die("DB error: ".mysql_error()); 
    @mysql_select_db($db) or die("DB error: ".mysql_error()); 
    @mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'"); #UTF-8 FIX 
} 

function _include($x) { 
    if (preg_match("/<!--Include:(.*)-->/", $x, $matches)){ 

     ob_start(); 
     include($matches[1]); 
     $output = ob_get_clean(); 

     return preg_replace("/<!--Include:(.*)-->/", $output, $x); 
    } 

} 

links.php

<?php 
$query = @mysql_query("SELECT title, description, url FROM links ORDER BY id") or die("DB error: ".mysql_error()); 

while($row = @mysql_fetch_array($query)) { 
    $url = $row["url"]; 
    $title = $row["title"]; 
    $description = $row["description"]; 
    echo "<a href=\"$url\">$title</a>: $description"; 
} 

@mysql_close($conn) or die(mysql_error()); 
?> 

test.php

<?php 

require("engine.php"); 

db(); 

echo _include("<div><!--Include:links.php--></div>"); 

?> 

Вместо того, чтобы выводить ряд ссылок внутри DIV, он пропускает возврат полностью end echoes from links.php, как если бы существовал только объект include и no ob_start() и ob_get_clean().

Почему?

+0

Вы можете добавить образец результата, пожалуйста? – Cedric

+0

[** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. Если вы выберете PDO, [здесь хороший учебник] (http://j.mp/PoWehJ). – Touki

+0

Я должен использовать mysql_ *, потому что сервер старый, и его php – Simosito

ответ

0

Вы можете вернуть строку из links.php:

<?php 
$query = @mysql_query("SELECT title, description, url FROM links ORDER BY id") or die("DB error: ".mysql_error()); 

$links =''; // 

while($row = @mysql_fetch_array($query)) { 
    $url = $row["url"]; 
    $title = $row["title"]; 
    $description = $row["description"]; 
    $links .= "<a href=\"$url\">$title</a>: $description";// 
} 

@mysql_close($conn) or die(mysql_error()); 
return $links;// 

затем, в engine.php:

function _include($x) { 
    if (preg_match("/<!--Include:(.*)-->/", $x, $matches)){ 

     //ob_start(); 
     $output = include($matches[1]); 
     //$output = ob_get_clean(); 

     return preg_replace("/<!--Include:(.*)-->/", $output, $x); 
    } 

} 
+0

не отвечает на ваш вопрос, но он должен исправить вашу проблему !! :) – Cedric

+0

Не работает. По какой-то причине $ links пуст, когда я возвращаю его ... – Simosito

+0

Nevermind, возможно, это проблема с FTP, она работает сейчас. – Simosito

Смежные вопросы