Здравствуйте. Помогите найти что добавляет 2 переноса строки в этом скрипте: Код (PHP): <?php if (isset ($_POST["do"])){ if ($_POST["do"] == "main"){ $db_host = $_POST["db_host"]; $db_user = $_POST["db_user"]; $db_pass = $_POST["db_pass"]; $db_name = $_POST["db_name"]; $db_charset = $_POST["db_charset"]; $db_prefix = $_POST["db_prefix"]; $adm_login = $_POST["adm_login"]; $adm_pass = $_POST["adm_pass"]; $adm_mail = $_POST["adm_mail"]; $servers = $_POST["servers"]; $pattern_rus = array ("а", "б", "в", "г", "д", "э", "е", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "ё", "ю", "я", " "); $pattern_eng = array ("a", "b", "v", "g", "d", "a", "e", "j", "z", "i", "i", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "ch", "sh", "sch", "", "i", "", "jo", "y", "ja", ""); $servers = str_replace ($pattern_rus, $pattern_eng, $servers); $servers = preg_replace ("/[^a-zA-Z0-9\,\[\]-\_\s]/","",$servers); $servers_arr = @split (",", $servers); if (count ($servers_arr) == 1){ $serverlist = "\"".$servers_arr[0]."\""; } else { for ($i = 0; $i < count($servers_arr); $i++){ if ($i == count ($servers_arr)-1){ $serverlist .= "\"".$servers_arr[$i]."\""; } else { $serverlist .= "\"".$servers_arr[$i]."\","; } } } //=======================Создание файла config.php===========================// $content = ' <?php Какой-то текст '; $file = fopen ("config.php", "w"); fputs ($file, $content); fclose ($file); //=========================Подключение к БД==================================// $sql = mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error()); mysql_select_db($db_name, $sql) or die(mysql_error()); mysql_query("SET NAMES '{$db_charset}'"); //===================Создание основных таблиц===============================// mysql_query(" ************** "); mysql_query(" ************** "); mysql_query(" ************** "); mysql_query(" ************** "); mysql_query(" ************** "); //=======================Запись основных данных в базу=========================// mysql_query ("*******************************"); mysql_query ("*******************************"); die ("ok"); //====================Установка таблиц серверов===============================// } else if ($_POST["do"] == "servers"){ require ("config.php"); $db_charset = $confdb["charset"]; $serverlist = $confmodules["serverlist"]; foreach ($serverlist as $server){ mysql_query(" ************** ") or die(mysql_error()); mysql_query(" ************** ") or die("mysql_error"); mysql_query(" ************** ") or die("mysql_error"); mysql_query(" ************** ") or die("mysql_error"); } die ("ok"); } } else die ("data_fail"); ?> В самом конце функция die ("ok") должна возвращать текст "оk". Но вместо этого она возвращает: " ok" именно с двумя переносами: http://joxi.ru/VrwVlGkhKGdw9A () - скриншот.
может в буфере что-то сидит, когда ты дохнешь? Не дохни, делай функцию и ретурн. Дохнуть вообще плохо.
Сейчас попробую. Много переписывать)) --- Добавлено --- Погоди ка, а как через ajax запрос можно функцию вызвать в обработчике?
Я сделал так: Код (PHP): } else if ($_POST["do"] == "servers"){ servers(); echo "ok"; } а в функции сделал ретурн "ok", но пробелы остались. --- Добавлено --- Может быть эти запросы выводят переносы? Код (PHP): function servers(){ require ("config.php"); $db_charset = $confdb["charset"]; $serverlist = $confmodules["serverlist"]; foreach ($serverlist as $server){ mysql_query(" CREATE TABLE IF NOT EXISTS `".$server."_permissions` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `type` tinyint(1) NOT NULL, `permission` text NOT NULL, `world` varchar(50) NOT NULL, `value` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=".$db_charset." AUTO_INCREMENT=1; ") or die(mysql_error()); mysql_query(" CREATE TABLE IF NOT EXISTS `".$server."_permissions_entity` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `type` tinyint(1) NOT NULL, `default` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=".$db_charset." AUTO_INCREMENT=1; ") or die("mysql_error"); mysql_query(" CREATE TABLE IF NOT EXISTS `".$server."_permissions_inheritance` ( `id` int(11) NOT NULL AUTO_INCREMENT, `child` varchar(255) NOT NULL, `parent` varchar(255) NOT NULL, `type` tinyint(1) NOT NULL, `world` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=".$db_charset." AUTO_INCREMENT=1; ") or die("mysql_error"); mysql_query(" CREATE TABLE IF NOT EXISTS `".$server."_cart` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nickname` varchar(255) NOT NULL, `item_id` varchar(255) NOT NULL, `item_amount` varchar(11) NOT NULL, `name` varchar(255) NOT NULL, `extra` text NOT NULL, `type` varchar(15) NOT NULL, `server` varchar(1) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=".$db_charset." AUTO_INCREMENT=1; ") or die("mysql_error"); } return ("ok"); } По скольку я удалил весь код с обработчика кроме самой функции (той что выше) иэтого: Код (PHP): if ($_POST["do"] == "servers"){ servers(); }
В конфиге вообще ничего не віводится. Там только хранятся данные БД, подключение к БД, и т.п. --- Добавлено --- Убрал даже die которые возвращали бы ошибку mysql. Но переносы откуда-то всё равно берутся. Уже всё что можно было отключил. Оставил только нужную мне функцию.
В общем разобрался. Всё из за моей невнимательности. В файле "config.php" тупо перед тегом <?php был 1 перенос и после тега ?> ещё 2. Так что спасибо за помощ.
+1 https://php.ru/manual/language.basic-syntax.phptags.html Если файл содержит только код PHP, предпочтительно опустить закрывающий тег в конце файла. Это помогает избежать добавлени случайных символов пробела или перевода строки после закрывающего тега PHP, которые могут послужить причиной нежелательных эффектов, так как PHP начинает выводить данные в буфер при отсутствии намерения у программиста выводить какие-либо данные в этой точке скрипта.