2014-12-19 2 views
-1

Я пытаюсь создать автоматический установщик для системы, которую я создал, но единственная проблема - генерация php-файла, в котором переменные просто не отображаются.PHP текст отсутствует, возможно регулярное выражение?

Вот мой код, чтобы создать файл

<?php 
$content = " <?php 
    $sqlHost = '".$host."'; 
    $sqlUser = '".$user."'; 
    $sqlPass = '".$pass."'; 
    $sqlDatabase = '".$db."'; 
    $sqlTables = array('donate_categories', 'donate_items', 'donate_claim', 'donate_admin'); 

    $connection = new PDO('mysql:host='.$sqlHost.';dbname='.$sqlDatabase.';charset-utf8', $sqlUser, $sqlPass); 
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
?>"; 

$fp = fopen("connection.php", "wb"); 
fwrite($fp, $content); 
$fclose($fp); 
?> 

, как вы можете видеть, что есть PHP код, завернутый в строке там; Однако выход немного странно ...

<?php 
    = 'localhost'; 
    = 'root'; 
    = ''; 
    = 'test'; 
    = array('donate_categories', 'donate_items', 'donate_claim', 'donate_admin'); 

    = new PDO('mysql:host='..';dbname='..';charset-utf8', ,); 
    (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
?> 

Ни одна из переменных не существует, и я посмотрел возможные проблемы с этим, но я не нашел ни одного.

+0

Попробуйте 'error_reporting (E_ALL);'. Двойные кавычки интерполируют переменные. – mario

+0

Сама проблема может быть легко устранена путем экранирования символов '' '(или переключения двойных кавычек на одинарные кавычки), но _why_ вы хотите сделать это? В чем именно смысл использования PHP-кода генерировать больше PHP-кода? – NullUserException

+1

Это кажется хорошим вариантом использования для heredoc, а не для этой запутанной конкатенации. http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc. '$ connection' все равно потребуется' \ $ 'экранирование. –

ответ

4

Я не могу проверить это прямо сейчас, но так как вы завернули текст в двойные кавычки, ваш сервер анализирует переменные $sqlHost, $sqlUser, ... и т. Д. В качестве переменных и ищет их значения в строке. Попытайтесь избежать таких значений, и дайте мне знать, работает ли это так, как вы намереваетесь.

<?php 
$content = " <?php 
    \$sqlHost = '".$host."'; 
    \$sqlUser = '".$user."'; 
    \$sqlPass = '".$pass."'; 
    \$sqlDatabase = '".$db."'; 
    \$sqlTables = array('donate_categories', 'donate_items', 'donate_claim', 'donate_admin'); 

    \$connection = new PDO('mysql:host='.\$sqlHost.';dbname='.\$sqlDatabase.';charset-utf8', \$sqlUser, \$sqlPass); 
    \$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
?>"; 

$fp = fopen("connection.php", "wb"); 
fwrite($fp, $content); 
$fclose($fp); 
?> 
+0

Спасибо, это работает; Не могли бы вы предоставить ссылку на более подробную информацию о том, как использовать '' string'' и '' string? '. Я понятия не имел, что' 'строка' 'будет анализировать переменные,' 'string'' нет? – Hobbyist

+2

Пособие - ваш друг: http://php.net/manual/en/language.types.string.php – NullUserException

+1

@ Christian.tucker Это объясняется в строках doc, которые я связал в основной теме комментариев –

0

Используйте одинарные кавычки, поскольку он пытается заменить переменные в строку.

<?php 
$content = ' <?php 
    $sqlHost = "'.$host.'"; 
    $sqlUser = "'.$user.'"; 
    $sqlPass = "'.$pass.'"; 
    $sqlDatabase = "'.$db.'"; 
    $sqlTables = array("donate_categories", "donate_items", "donate_claim", "donate_admin"); 

    $connection = new PDO("mysql:host=".$sqlHost.";dbname=".$sqlDatabase.";charset-utf8", $sqlUser, $sqlPass); 
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
?>'; 

$fp = fopen('connection.php', 'wb'); 
fwrite($fp, $content); 
$fclose($fp); 
?> 

http://php.net/manual/es/language.types.string.php

С уважением.

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