PHP выводит единицу

241
06 июня 2017, 01:00
file_put_contents("posts/$a_i/index.php", "\xEF\xBB\xBF".include'./engine.php');

Почему этот файл выводит единицу в созданном файле

Output : 1

Сам файл:

<?php 
$connect = mysql_connect("localhost", "root", "");
$db = mysql_select_db("mybase");
mysql_set_charset("utf-8");
$sql = "SHOW TABLE STATUS FROM mybase LIKE '$table'"; 
$result = mysql_query($sql); 
$row    = mysql_fetch_assoc($result); 
$a_i = $row['Auto_increment'];
$title = strip_tags(trim($_POST['title']));
$content = $_POST['content'];
$author = strip_tags(trim($_POST['author']));
$image = strip_tags(trim($_POST['image']));
$date = $_POST['date'];
mkdir("./posts/$a_i");
mysql_query(
    "INSERT INTO posts(title, author, content, date, image)
    VALUES ('$title', '$author', '$content', '$date', '$image' )        
    ");
mysql_close();
$idprogid = $a_i;
file_put_contents("posts/$a_i/index.php", "\xEF\xBB\xBF".include'./engine.php');
?>

Файл engine.php

<?php  
$connect = mysql_connect("localhost", "root", "");
$db = mysql_select_db("mybase");
mysql_set_charset("utf-8");

$choose = mysql_query(" SELECT * FROM posts where id = $idprogid");
mysql_close();

$row = mysql_fetch_assoc($choose)
?>  
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title><?php echo $row['title']; ?></title>
</head>
<body>
    <blockquote style=" background-color: #eee;">
        <img src="<?php echo $row['image'] ?>" alt="noalt" align="right" border="1" width="100">
        <h1><?php echo $row['title']; ?></h1>
        <p><small><?php echo $row['date']; ?></small></p>
        <p><?php echo $row['content']; ?> <a href="/">На главную</a></p><hr>
    </blockquote>
</body>
</html>
Answer 1

Кажется мне что у вас срабатывает инклуд в этом месте:

"\xEF\xBB\xBF".include'./engine.php'

И получается в file_put_contents вставляется ответ true которые преобразуется в 1.

Если хотите данные с файла вставить в файл сначала сделайте инклуд и потом переменную что в файле вставляйте в файл.

UPD. Исходя из исходного кода понял что вы пытаетесь на каждый новый пост создавать PHP файл, это не нужно, приведу самый простой пример как это сделать в 1 файле, вместо файла engine.php создайте к примеру файл post.php и в нём принимайте $_GET значение, его подставляйте в ваш запрос и всё, ваш подход не правильный, представьте если вы добавите пароль к базе или поменяете верстку, вам надо будет править все .php файлы.

Пример кода приведу на основе вашего кода:

<?php  
//Подключение бы вынести в отдельный файл и потом везде вызывать его через include
$connect = mysql_connect("localhost", "root", "");
$db = mysql_select_db("mybase");
mysql_set_charset("utf-8");
//нужно хоть не много обезопасить себя от XSS
$id = mysql_real_escape_string($_GET['id']);
$choose = mysql_query("SELECT * FROM posts where `id` = \"$id\"");
$row = mysql_fetch_assoc($choose);
if (empty($row)) {
    echo 'Запись не найдена';
    exit();
}
?>  
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title><?php echo $row['title']; ?></title>
</head>
<body>
    <blockquote style=" background-color: #eee;">
        <img src="<?php echo $row['image'] ?>" alt="noalt" align="right" border="1" width="100">
        <h1><?php echo $row['title']; ?></h1>
        <p><small><?php echo $row['date']; ?></small></p>
        <p><?php echo $row['content']; ?> <a href="/">На главную</a></p><hr>
    </blockquote>
</body>
</html>

Файл post.php кладете в корень к примеру и обращаетесь www.site.ru/post.php?id=1 и получите запись (при условии что ).

Если вы хотите такой url кау вас нужно использовать ModRewrite если вы используете Apache

READ ALSO
Дерево. Проблема с заполнением

Дерево. Проблема с заполнением

Делал заполнения дерева с помощью рекурсии а теперь попытался через циклНо есть проблема, я нахожу место куда надо вставить элемент но не могу...

210
Как работать с ethernet портом на c++

Как работать с ethernet портом на c++

ЗдравствуйтеУ меня есть пульт который подключается к специальному контроллеру через ethernet кабель

410
Ожидание выполнения потока Winapi

Ожидание выполнения потока Winapi

Подскажите, почему выполняется только первый поток? Как можно исправить, что бы выполнялись потоки по очереди?

328