Мне не понятно, где тогда хранится весь ответ клиента, если не в памяти ?В памяти конечно, но так как это оболочка над данными, то реализация скрыта, условно вы можете считать это файлом, который может активно меняться.
class Program
{
static void Main(string[] args)
{
string link = @"D:\csharp_server\program\program\bin\Debug\net5.0\includes\php\win86\php-cgi.exe", //ссылка на CGI
text = @"D:\csharp_server\program\program\bin\Debug\net5.0\www\UPPDD\php\auth.php"; // ссылка на файл где идет использование POST/GET
Console.WriteLine(UseInterpreter(link, text));// вывод в консоль для просмотра
Console.ReadKey();
}
static string UseInterpreter(string php, string file)
{
ProcessStartInfo info = new ProcessStartInfo(php);
string req = "login=admin&pass=secretpass&but=%D0%92%D0%BE%D0%B9%D1%82%D0%B8"; // параметры формы
info.UseShellExecute = false;
info.ErrorDialog = false;
info.RedirectStandardError = true;
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.CreateNoWindow = true;
// переменные среды
info.EnvironmentVariables.Add("REQUEST_METHOD", "POST");
info.EnvironmentVariables.Add("HTTP_CONNECTION", $"keep-alive");
info.EnvironmentVariables.Add("REDIRECT_STATUS", "false");
info.EnvironmentVariables.Add("GETAWAY_INTERFACE", "CGI");
info.EnvironmentVariables.Add("CONTENT_TYPE", "application/x-www-form-urlencoded");
info.EnvironmentVariables.Add("CONTENT_LENGTH", Encoding.UTF8.GetBytes(req).Length.ToString());
info.EnvironmentVariables.Add("HTTP_ACCEPT", "*.*");
info.EnvironmentVariables.Add("SCRIPT_FILENAME", file);
// передеча информации в Process и старт процесса
Process p = new Process();
p.StartInfo = info;
bool pStarted = p.Start();
StreamWriter input = p.StandardInput; // стандартынй поток ввода
input.WriteLine(req); // ввод
StreamReader output = p.StandardOutput; // поток вывода
StreamReader error = p.StandardError; // поток вывода ошибки
// перекодировка, при наличии кириллицы php выводит в кодировке cp866, тут мы переводим из cp866 в utf8
byte[] cp866_byte = output.CurrentEncoding.GetBytes(output.ReadToEnd());
string cp866_byte_to_utf8 = Encoding.UTF8.GetString(cp866_byte);
return cp866_byte_to_utf8;
}
}
$host = '127.0.0.1';
$db = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $user, $pass, $opt)
$stmt = $pdo->prepare("SELECT last_name FROM first_table WHERE name=?");
$stmt->execute([$name]);
$last_name = $stmt->fetchColumn();
hello.html.twig
:Привет, {{ name }}!
,echo $twig->render('hello.html.twig', ['name' => 'Хабр']);
передаются имя темплейта и данные, которые там нужно подставить.REMOTE_ADDR
не подделать, но то в теории, потому что всякая кака на твоей стороне любит его подменять для удобства. Например нередко можно встретить глубоко в чужом коде подобную дыру:if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$xffaddrs = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $xffaddrs[0];
}
Мне почему-то кажется, что 'поиск Fulltext' должен подойти для такой задачи,Вам кажется. Кроме того что фуллтекст вообще не для этого, он еще и работать будет относительно медленно, так как вариативность значений будет низкая. Про "удобство" работы со строкой вместо нормального индекса вообще молчу.
Нужно, чтобы можно было быстро находить все темы (топики) для одного заданного раздела (искать тему, которая относится сразу к двум и более разделам не нужно).м2м, это надежно и быстро, достаточно знать индекс раздела.
Как такое реализовать максимально просто?Совет: Не гонитесь за кажущейся простотой, вы хапнете гораздо больше гемора от неправильной архитектуры, нежели от еще 15 минут, потраченных на создание таблицы справочника, пивот таблицы и написания 2 джоинов в запросе. Важнее сделать правильно, а не проще.
$name = 'My\\Name\\Space\\'.'ClassName';
new $name();
new ClassName();
$error = $this->handle($json);
if ($error === '') {
// логируем что все ок
} else {
// логируем ошибку
}