Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/47: Рейтинг темы: голосов - 47, средняя оценка - 4.83
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232

Как создать динамические страницы в РНР

09.05.2024, 13:32. Показов 12087. Ответов 164

Студворк — интернет-сервис помощи студентам
Я пишу свой сайт с форумом. Мне нужно, чтобы 2 файла profile.php и vopros.php изменяли своё содержимое в зависимости от id юзера и id вопроса соответственно. И чтобы остальные файлы рнр и с другими расширениями не перенаправлялись на точку входа.
Т.е. мне нужно создать движок на базе данных, если я правильно поняла. Для этого я создала файл .htaccess и файл точки входа vhod.php.
Я честно пыталась разобраться в теории и синтаксисе .htaccess, но мне это не очень удалось.
Я написала файл .htaccess:
Code
1
2
3
4
5
6
7
8
9
RewriteEngine on
RewriteBase /
# Запретить индексацию каталогов
Options – Indexes
# следующее за этими директивами будет касаться только #виртуальных URL для которых нет папки или файла на диске #сервера.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#Мы перенаправляем все запросы виртуальных url на наш файл точки входа vhod.php
RewriteRule ^.*$ vhod.php [NC,L]
А также файл vhod.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
$link = mysqli_connect("localhost", "airin", "root", "vv_bd");  
mysqli_set_charset($link, 'utf8mb4');
 
if($_SERVER['REQUEST_URI'] =='/'){
    //Имя страницы
    $Page = 'index'; 
    //Имя модуля
    $Module = 'index';
}else{
    //
$URL_Path = parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH);
//Определяем имя страницы
$URL_Parts = explode('/', trim($URL_Path,' /'));
//Имя страницы
$Page = array_shift($URL_Parts);
//Имя модуля
$Module = array_shift($URL_Parts);
//Разбор параметров id/2
if(!empty($Module)){
    $Param = array();
    for($i = 0; $i < count($URL_Parts); $i++){
    $Param [$URL_Parts[$i]] = $URL_Parts[++$i];
    }
}
}
 
//Пишем страницу входа
if($Page == 'index')include('page/vhod.php');
 
    //Пишем остальные динамические страницы
else if($Page == 'vopros') include('page/vopros.php');
else if($Page == 'profile') include('page/profile.php');
?>
Но выводится ошибка: 500 Internal Server Error.
И вообще сайт не открывается.

Пробовала записать правило только для динамической страницы. Так:
Code
1
2
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?id=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?id=$1
Так:
Code
1
RewriteRule ^(.*)$ profile.php? id=$1  [NC,L]
И так:
Code
1
RewriteRule ^(.*)$ profile.php?/$1  [NC,L]
Но ошибка вылазит та же.
Видимо, я неправильно понимаю, как это работает.
Что у меня не так с .htaccess и можно ли указать правило только для двух файлов и как это сделать правильно?
И ещё один вопрос: как (в каком формате) указывать название этих двух файлов?
vopros.php?, vopros.php, или vopros.php?id=$1
И их название в файле mytytles.php:
Code
1
2
3
'/vv2/vopros.php?' => 'Вопрос',
'/vv2/vopros.php' => 'Вопрос',
'/vv2/vopros.php?id=$1' => 'Вопрос',
Или как-то ещё?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.05.2024, 13:32
Ответы с готовыми решениями:

Можно ли на РНР создавать динамические страницы?
Умею создавать статические HTML- страницы, но это не устраивает. Хочу сделать динамическую страничку в сайте, чтобы изображение менялось...

Как передать РНР скрипту имя страницы, вызвавшей процесс?
В начале страницы устанавливаем РНР код, позволяющий определить ее имя: $str = $_SERVER; Далее производим вывод через АЯКС: ...

Как в текущий файл на рнр подрузить массив из другого файла на рнр?
Мне нужно подгружать массив с данными из mysql одного файла на рнр в текущий файл рнр с выводом точек на график. Для отработки этого режима...

164
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
14.05.2024, 21:24
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Sollita Посмотреть сообщение
в нескольких статьях написано, что должно быть так
Да, примерно так. Только www - слишком общая папка (и слеш в конце не нужен). Поэтому лучше /var/www/site или /var/www/site/public (также можно добавить еще один каталог, относящийся к пользователю, если сайты могут принадлежать разным пользователям).

Цитата Сообщение от Sollita Посмотреть сообщение
А у меня в конфигурационном файле всё наоборот.
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
14.05.2024, 21:41  [ТС]
Phantom-84, только у меня другой адрес. Кажется такой: C:Server/www/host2.localhost/
Может быть, я адрес неправильно указала...
0
Невнимательный
 Аватар для ft4l
3141 / 1351 / 362
Регистрация: 08.02.2013
Сообщений: 7,900
Записей в блоге: 2
15.05.2024, 00:35
Цитата Сообщение от Sollita Посмотреть сообщение
C:Server/www/host2.localhost/
именно так, неправильно слеша не хватает C:/....
Но если совсем нигде не было бы директив для директории C:/Server/www/host2.localhost/ или C:/Server/www/ и т.д.
Просто не было бы доступа совсем...

Всё последовательно по умолчанию там устанавливается запрет доступа ко всему
XML
1
2
3
4
<Directory />
    AllowOverride none
    Require all denied
</Directory>
Поэтому если не разрешить к директории с сайтом, будет 403

Но и здесь у Вас имена непонятные для каталогов
www можно сделать например для нескольких хостов, но обычно наоборот
например задаётся путь для размещения там нескольких хостов
например C:/Server/home
по этому пути размещаются каталоги , для разных хостов , например host2.localhost , host1.ru ...
... и только в них которые станут DocumentRoot
вот им и дают такие имена www , htdocs , public_html ...
Ибо каждый сайт может иметь только ему нужные файлы/директории закрытыми для доступа

... хотя можно и открыть например C:/Server/www C:/Server/www2 C:/Server/www3
и сделать C:/Server таким общим хранилищем
Но это возможные конфликты.

Если www у Вас открыт и является DocumentRoot другого хоста/сайта,
то host2.localhost как другому DocumentRoot там делать нечего

и должно быть например так
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# для удобства изменения например буквы диска и прочего... иногда можно просто /Server
Define MYHOME C:/Server
 
# для default_host всё по максимуму и не нужны файлы за пределами DocumentRoot 
<Directory "${MYHOME}/www">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
 
#для остальных хостов у которорых есть вложенные www
# например с Wildcard mask ... все имена начинаются на 'host'
<Directory "${MYHOME}/host*/www">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
    # или Require local
</Directory>
#И для вложенных возможны какие-то  запреты/переопределения или дополнения
#и  воможны открытия из-за пределов каких-то дополнительных с алиасами и т.п.
Если удобнее меньше раскидывать по C:/Server нелается например C:/Server/home/*/www
или вообще для C:/home/*/www

Добавлено через 20 минут
Цитата Сообщение от ft4l Посмотреть сообщение
www , htdocs , public_html
Вариант для поддоменов в стиле denwer,)
/home/имяДомена - закрыта
/home/имяДомена/*/ - DocumentRoot поддоменов)
/home/имяДомена/www или htdocs или public_html - DocumentRoot основного домена
домены более-уровневые можно добалять использованием точек в именах поддоменов
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
15.05.2024, 11:31  [ТС]
ft4l, на самом деле слэш там есть, просто я адрес по памяти писала. Я же не в компьютере была, а в планшете
Я имела в виду не это. Адрес я списала из DocumentRoot, так что он сам по себе правильный, но возможно, его нужно писать не весь, а только какую-то часть?

У меня в www три виртуальных хоста. Потому что, когда я их устанавливала, я вообще не понимала смысла того, что я делаю, и просто повторяла действия из статьи в интернете. А потом менять папки стало уже поздно, потому что это же придётся менять адреса в конфигурационных файлах. Если бы мне было не лень это делать, я бы для начала перенесла всё на диск D.
На пока я не готова этим заниматься.
Если у меня написан адрес: C:/Server/www/host2.localhost/, это правильно?

Добавлено через 20 минут
ft4l,вот теперь я в компьютере
У меня написано в DocumentRoot "C:/Server/www/" . Я добавила название папки, в которой у меня этот сайт и получилось:
C:\Server\www\host2.localhost
Может, нужно убрать host2.localhost и написать как в DocumentRoot "C:/Server/www/"?

Добавлено через 31 минуту
ft4l, Я попробовала:
<Directory C:/Server/www>
<Directory C:/Server/www/>
<Directory />
<Directory C:/Server/www/host2.localhost>
Во всех случаях при попытке входа на сайт ошибка 500
Поэтому я вернула пока значение по умолчанию.

Добавлено через 1 час 36 минут
Я решила делать код без точки входа.
В файлах vopross.php и zadavator.php я вставила ссылку:
<a href="vopros.php?id_vopr=' . $row['id_vopr'] . '">'
. $row["contentV"] .'</a>
и
echo '<a href="vopros.php?id_vopr=' . $row1['id_vopr'] . '">Перейти на страницу вопроса</a>';
Соответственно.

А в файле vopros.php я вставила в начало:
//Проверим, есть ли id_vopr в $_GET
if (isset($_GET["id_vopr"])){
//Если есть выводим из $_GET
$id_vopr = intval($_GET['id_vopr']);
$url = "vopros.php?id_vopr=$id_vopr";
parse_url($url);
И вообще убрала из сессии id_vopr.

Теперь у меня всё работает. Виртуальные файлы открываются. И точка входа не нужна.
И если бы мне кто-то предложил такой вариант в начале обсуждения, я бы сэкономила кучу времени.
0
Невнимательный
 Аватар для ft4l
3141 / 1351 / 362
Регистрация: 08.02.2013
Сообщений: 7,900
Записей в блоге: 2
15.05.2024, 12:29
Цитата Сообщение от Sollita Посмотреть сообщение
в www три виртуальных хоста.
Так тоже можно.
В основном конфиге как-минимум должно присутствовать раскомментированным

Bash
1
2
3
4
5
6
7
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule dir_module modules/mod_dir.so
# необязательно но неплохо помогает разобраться с сервером
# LoadModule info_module modules/mod_info.so
LoadModule mime_module modules/mod_mime.so
LoadModule rewrite_module modules/mod_rewrite.so
без последнего 500 может быть из-за Rewrite* в htaccess
что-то типа
Bash
1
2
LoadModule php_module /A/php8.2/php8apache2_4.dll
PhpIniDir /A/php8.2
но с вашими путями

и далее обычно уже есть что-то типа
XML
1
2
3
4
5
6
7
<Directory />
    AllowOverride none
    Require all denied
</Directory>
<Files ".ht*">
    Require all denied
</Files>
Никаких DocumentRoot можно в httpd.conf не указывать
Никакие Include например не нужно раскомментировать а добавляется свой
Bash
1
Include conf/vhosts.conf
т.е. создаётся файл vhosts.conf рядом с httpd.conf
например такой
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#Listen 80 # и следующие пару строк возможно уже есть в httpd.conf а  можно и здесь
ServerAdmin admin@localhost
ServerName localhost:80
# тоже возможно было
<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>
 
 
# для удобства изменения например буквы диска и прочего... иногда можно просто /Server
Define MYHOME C:/Server/www
# непосредственно в /Server/www сайта нет, есть во вложенных 
 
#  Например хотите выполнение php для *.php во всех дирректориях и для всех хостов
DirectoryIndex index.php index.html
AddType application/x-httpd-php php
#  Для этого были нужно включать - mod_dir , mod_php и mod_mime
 
 
# Directory для любого хоста с DocumentRoot  в ${MYHOME}
<Directory "${MYHOME}/*/www">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require local
  # например если не нужно открывать всё кроме default_host для доступа извне
</Directory>
 
# Directory для default_host ... папка C:/Server/www/www
<Directory "${MYHOME}/www">
# например можно что-то переопределить
    Options -Indexes
    Require all granted
</Directory>
И дальше в этом-же vhosts.conf настройка хостов
... первый будет открываться на все запросы заголовок запроса Host: не совпал ни с одним ServerName/ServerAlais
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<VirtualHost *:80>
        DocumentRoot "${MYHOME}/www"
</VirtualHost>
 
<VirtualHost *:80>
    ServerName php.zz
    DocumentRoot "${MYHOME}/php.zz/www"
</VirtualHost>
 
<VirtualHost *:80>
   ServerName zz.zz
    ServerAlias www.zz.zz
    DocumentRoot "${MYHOME}/zz.zz/www"
    <IfModule mod_info.c>
        <Location /server-info>
            SetHandler server-info
        </Location>
    </IfModule>
# zz.zz/server-info странички с полезной инфо о сервере
#   <IfModule mod_status.c>
#       <Location /server-status>
#           SetHandler server-status
#       </Location>
#   </IfModule>
</VirtualHost>
 
<VirtualHost *:80>
  Options +ExecCGI
    ServerName pl.zz
    DocumentRoot "${MYHOME}/pl.zz/www"
    ErrorLog "${MYHOME}/error-pl.zz.log"
</VirtualHost>
Но это у меня например были-бы сайты pl.zz, zz.zz, www.zz.zz, php.zz и просто zz - localhost
корни которых были-бы
C:/Server/www/pl.zz/www, C:/Server/www/zz.zz/www, C:/Server/www/php.zz/www, C:/Server/www/www
... без поддоменов, для которых как-раз можно было-бы создавать их по именам рядом с вложенными www
и например задавать блоки <Directory> с ${MYHOME}/*/*
и обязательно <VirtualHost *:80> с их собственными ServerName
и соответственно в файле c:\Windows\SYSTEM32\DRIVERS\ETC\hosts было-бы что-то типа
127.0.0.1 zz.zz
127.0.0.1 php.zz
127.0.0.1 pl.zz
127.0.0.1 [url]www.zz.zz[/url]


А у Вас свои .) и только Вам решать как что и для чего держать и насколько им нужны одинаковые или разные настройки.

Добавлено через 5 минут
поправил
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
15.05.2024, 13:57  [ТС]
ft4l, спасибо, но я уже отказалась от этой мысли и пошла самым простым путём. Разбираться с конфигурационным файлом я не готова. Тем более, что теперь мне это и не нужно.
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
15.05.2024, 20:30
Цитата Сообщение от Sollita Посмотреть сообщение
Может быть, я адрес неправильно указала...
Это не адрес, а путь в ФС. А еще точнее - полное имя папки (как я писал, слеш в конце не нужен). У вас Windows, но там все почти так же делается.

Цитата Сообщение от Sollita Посмотреть сообщение
Я решила делать код без точки входа.
Единой точки входа. Я уже давно понял, что нам пора расходиться. Отход от единой точки входа - это на самом деле усложнение, а не упрощение. И Apache элементарно конфигурируется (тем более что вам практически все разжевали).

Цитата Сообщение от Sollita Посмотреть сообщение
И если бы мне кто-то предложил такой вариант в начале обсуждения, я бы сэкономила кучу времени.
И память у вас очень короткая

Добавлено через 5 минут
Directory обычно внутри VirtualHost прописывается:
Code
1
2
3
4
5
6
7
8
9
10
<VirtualHost *:80>
    ServerName host2.localhost
    DocumentRoot "C:/Server/www/host2.localhost"
    ErrorLog "C:/Temp/logs/host2-error.log"
    CustomLog "C:/Temp/logs/host2-access.log" common
    <Directory "C:/Server/www/host2.localhost">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
Серверные скрипты лучше размещать не в корне (единую точку входа можно в корне). Тогда будет так:
Code
1
2
3
4
5
6
7
8
9
10
<VirtualHost *:80>
    ServerName host2.localhost
    DocumentRoot "C:/Server/www/host2.localhost/public"
    ErrorLog "C:/Temp/logs/host2-error.log"
    CustomLog "C:/Temp/logs/host2-access.log" common
    <Directory "C:/Server/www/host2.localhost/public">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
В пути в ФС не обязательно полное имя хоста писать. Можно кратко, например "C:/Server/www/host2" или "C:/Server/www/host2/public".
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
15.05.2024, 20:53  [ТС]
Phantom-84, юморист Может, тот, кто пишет реальный сайт, лучше знает, что проще, а что сложнее?
Память у меня очень хорошая. Я прекрасно помню, что ни одного конкретного и полезного предложения от Вас не увидела.
Успехов. Постарайтесь не морочить голову людям, которые нуждаются в помощи.
0
Невнимательный
 Аватар для ft4l
3141 / 1351 / 362
Регистрация: 08.02.2013
Сообщений: 7,900
Записей в блоге: 2
15.05.2024, 22:18
Цитата Сообщение от Sollita Посмотреть сообщение
простым путём
всмысле !?
1. без mod_rewrite единая точка входа
с запросами типа /?vopros=999 /?zadavator , /?user , /?vopros=999&page=2, /?pg=1 , ...
1.1. пакетировать числа/строки по своему ... и либо /?pack либо /?q=pack ?
2. без единой точки /?pg=1 , /vopros.php?id=999 , ....

ещё одна дилема,
то что могут быть ajax-запросы GET/POST с примерно такими-же параметрами... отдача совсем без html,body,...
иногда бывает можно что-то в iframe отдавать... как-бы просто с другим header.php
Например вместо(/или как опция) постраниичной навигации можно реализовать динамическую подгрузку кусками.

Вот для этого я пробовал 3 точки входа
1 /, 2 ajax.php, 3 ifr.php + в скриптах кой-какие ограничения... типа only то, only сё )
без точек в принципе тоже в чём-то проще ... просто ещё парметр, типа ?mode=ajax
Но к точкам привыкаешь
... самое удобное что во включаемых файлах, которые по сути и есть основной код страниц,
можно в любой момент вызвать return; и вернуть выполнение в их включившее.
тогда как в самом верхнем или только какие-то ветвления или exit;
Но каждый сам сам знает как ему удобнее .) во всём свои плюсы и минусы, в том или ином... сразу всё во всём не бывает ))

Добавлено через 10 минут
Цитата Сообщение от ft4l Посмотреть сообщение
1 /, 2 ajax.php, 3 ifr.php
как вариант субдомены .) forum ajax.forum iframe.forum ,) но для этого придётся в конфиги
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
16.05.2024, 08:26  [ТС]
ft4l, если бы я ещё поняла, что Вы написали... Я ajax не изучала, может быть, поэтому не понимаю. Единственное, что я поняла, это что Вы попытались мне объяснить, чем с точками входа лучше, чем без них. Видимо, когда все файлы от одной точки входа - это почему-то удобнее. Но у меня только два виртуальных файла и ради них такие мучения? Есть хороший принцип :"Необходимо и достаточно", которому я следую в любой работе и поэтому достигаю любой поставленной цели в сжатые сроки. И сроки для меня важны, потому что у меня осталось не так много времени. Поэтому тратить время на изучение чего-то ненужного мне в данный момент я не готова.
Конкретно по моему вопросу это значит, что для работы двух виртуальных файлов НЕОБХОДИМО, чтобы в их адресе читалось значение параметра и чтобы в зависимости от этого параметра изменялось содержимое виртуального файла. И если для этого ДОСТАТОЧНО написать 10 строчек в 4 файлах, то меня это устраивает гораздо больше, чем эти же 10 строчек и плюс написание двух дополнительных файлов, с их предварительным изучением, и игрища с конфигурационным файлом, на которые могут уйти недели. Тут выбор совершенно однозначен.
Спасибо, что помогли мне это понять.
0
Невнимательный
 Аватар для ft4l
3141 / 1351 / 362
Регистрация: 08.02.2013
Сообщений: 7,900
Записей в блоге: 2
16.05.2024, 09:18
Цитата Сообщение от Sollita Посмотреть сообщение
игрища с конфигурационным файлом
Ну как знаете
... просто тот момент с именами и размещениями хостов может помочь например автоматизировать чего-нибудь
или не запутываться когда будет много разных сайтов... не спроста же одного стало мало и поддомен придумали)

Не по теме:


например если у меня все хосты по полочкам разложены,
и особо различий между ними никаких... и как говорил Phantom-84 ,) ... Directory в VirtualHost
... как в принципе много где и делается просто добавил каталог, запустил скрипт, перезапустил сервер
я могу просто положить где-то типа такого, но с перезаписями
file.bat

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
::<?php $x=' 
@ECHO OFF
ECHO.
SETLOCAL
    SET HOSTS=%WINDIR%\system32\drivers\etc\hosts
    SET CMD=CMD
 
IF "%PROCESSOR_ARCHITEW6432%" == "AMD64" ( :: x86 on x64 win
    SET CMD=%COMSPEC:system32=Sysnative%
)
 
:: тут нужны Ваши настройки ... директория с папками хостов и директория с php добавляксая в %PATH%
SET HTHOME=%~d0/A/home
IF "%PATH%" == "%PATH:\A\32\php8.2=%" SET PATH=%PATH%;%~d0\A\32\php8.2
 
CD /D %HTHOME%
PROMPT $P$_$G$S$S
::TITLE VHosts 
 
START /B CMD /c php -f %~dpnx0
ENDLOCAL
ECHO.
PAUSE >nul
EXIT /B
';
// получение переменных окружения
$HTHOME = $_SERVER['HTHOME'];
$HOSTS = $_SERVER['HOSTS'];
$CMD = $_SERVER['CMD'];
// содержимое файла vhosts.conf
$vh = '';
$vh .= "Define HTHOME $HTHOME\n\n";
// формат для каждого хоста
function retVHost($name, $path){
    return <<<DOC
<VirtualHost *:*>
#   ServerAdmin webmaster@$name
    ServerName $name
    DocumentRoot "\${HTHOME}/$path"
    ErrorLog "logs/error-$name.log"
#   CustomLog "logs/access-$name.log" common
    <Directory "\${HTHOME}/$path">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
 
DOC;
}
 
// чтение директории с хостами ... первое имя если есть localhost, второе имя компа, остатльные *.zz можно сделать .ru
$Ds = glob('{localhost,'. strtolower($_SERVER['COMPUTERNAME']) .',*.zz}/*', GLOB_BRACE + GLOB_ONLYDIR);
$Hs = [];
// имя.Хоста => путь
foreach ($Ds AS $d){
    list($host, $sub) = explode('/',$d);
    if (preg_match('/^\.|inc/', $sub)) continue; // например какие-то особенные имена не для поддоменов пропускаются
    if (in_array($sub, ['www','htdocs','public_html','public']))
        $Hs[$host] = $d;
    else
        $Hs[$sub .'.'. $host] = $d;
}
// var_export($Hs);
// заполнение vhosts.conf
foreach ($Hs AS $h => $d){
    $vh .= retVHost($h, $d);
}
 
echo "------------- vhosts.conf -----------\n$vh";
 
// gjkextybt содержимого системного файла hosts
$hosts = `$CMD /c type $HOSTS`;// get hosts file contents
// удаление совпавших ранее существовавших записей
$hosts = preg_replace('/^\h*+(?!#)\S++\h++(?:'. implode('|', array_map('preg_quote', array_keys($Hs))). ')\h*$\v*/m', '', $hosts);
// добавление 
foreach (array_keys($Hs) AS $h) $hosts .= "127.0.0.1\t\t$h\r\n";
 
echo "------------- hosts -----------\n$hosts";
и перезаписать включающееся конфигом и hosts , если из под админа запустить.

0
 Аватар для DmitriyLutsenko
76 / 62 / 16
Регистрация: 13.07.2020
Сообщений: 262
17.05.2024, 09:25
Цитата Сообщение от Sollita Посмотреть сообщение
юморист Может, тот, кто пишет реальный сайт, лучше знает, что проще, а что сложнее?
Память у меня очень хорошая. Я прекрасно помню, что ни одного конкретного и полезного предложения от Вас не увидела.
Успехов. Постарайтесь не морочить голову людям, которые нуждаются в помощи.
Поймите меня правильно: помощь бывает разной. Одному товарищу достаточно задавать наводящие вопросы, чтобы он сам осознал, что и как делать, и применял полученный опыт в дальнейшем, а другим нужно выкладывать готовое решение(в большинстве случаев просто для "Сдать и забыть").

Фантом-84 задает Вам правильные вопросы, чтобы Вы сами поняли, в какую сторону нужно копать. Вам же нужно уже готовое решение. Вот и вся причина этого локального конфликта взглядов.

Сделайте, пожалуйста, следующее:
  • Пришлите исходники всего Вашего сайта (.htaccess у Вас там уже будет)
  • Пришлите сюда дамп базы данных, которую Вы используйте (в sql формате)
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
17.05.2024, 13:35  [ТС]
DmitriyLutsenko, если бы Вы прочитали обсуждение, то увидели бы, что я уже сама нашла решение. Повезло, нашла хорошую статью про GET параметры
Вот моя цитата:
"Я решила делать код без точки входа.
В файлах vopross.php и zadavator.php я вставила ссылку:
<a href="vopros.php?id_vopr=' . $row['id_vopr'] . '">'
. $row["contentV"] .'</a>
и
echo '<a href="vopros.php?id_vopr=' . $row1['id_vopr'] . '">Перейти на страницу вопроса</a>';
Соответственно.

А в файле vopros.php я вставила в начало:
//Проверим, есть ли id_vopr в $_GET
if (isset($_GET["id_vopr"])){
//Если есть выводим из $_GET
$id_vopr = intval($_GET['id_vopr']);
$url = "vopros.php?id_vopr=$id_vopr";
parse_url($url);
И вообще убрала из сессии id_vopr.

Теперь у меня всё работает. Виртуальные файлы открываются. И точка входа не нужна.
И если бы мне кто-то предложил такой вариант в начале обсуждения, я бы сэкономила кучу времени."
Так что помощь по данному вопросу мне уже не нужна. Благодарю.
Готовое решение мне не нужно, но хотелось бы, чтобы советы давали дельные и конкретные.
1
 Аватар для DmitriyLutsenko
76 / 62 / 16
Регистрация: 13.07.2020
Сообщений: 262
17.05.2024, 13:47
Цитата Сообщение от Sollita Посмотреть сообщение
DmitriyLutsenko, если бы Вы прочитали обсуждение, то увидели бы, что я уже сама нашла решение. Повезло, нашла хорошую статью про GET параметры
По стечению обстоятельств не ознакомился со всеми 5-ю страницами обсуждения.

Цитата Сообщение от Sollita Посмотреть сообщение
И если бы мне кто-то предложил такой вариант в начале обсуждения, я бы сэкономила кучу времени."
Так что помощь по данному вопросу мне уже не нужна. Благодарю.
Рад, что Вы смогли разобраться.

Цитата Сообщение от Sollita Посмотреть сообщение
Готовое решение мне не нужно, но хотелось бы, чтобы советы давали дельные и конкретные.
Тут я всегда говорю, что форумчане, если и решаются помочь, то они сами выбирают способ этой помощи.
Есть те, кто считает, что нужно человека научить думать самому. Поэтому наводящими вопросами подвигают разобраться в своем вопросе самостоятельно.
Есть и те, кто понимает безысходность человека, столкнувшегося с непреодолимой проблемой. Поэтому решение и скидывается готовое.

Просто это большая удача, что кто-то тебе что-то пишет по твоему вопросу, не игнорируя сутками/неделями.
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
17.05.2024, 13:56  [ТС]
DmitriyLutsenko, я в курсе, что не всегда отвечают и что иногда пишут чистый бред, но мне здесь неоднократно очень помогали и я за это благодарна. Но я считаю, что советы нужно давать, когда ты сам в теме. Тем более, если человек написал, что сам пишет сайт, то что именно может навести на мысль, что вопрос написан ради домашнего задания или курсовой?
Лично я все курсовые писала сама и про Метаморфозы Овидия, и по термеху и сопромату.
1
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
17.05.2024, 19:11
Цитата Сообщение от Sollita Посмотреть сообщение
И если бы мне кто-то предложил такой вариант в начале обсуждения, я бы сэкономила кучу времени.
Я предлагал такой вариант, когда писал про отдельные точки входа. Не считая вот этой фигни:
Цитата Сообщение от Sollita Посмотреть сообщение
$url = "vopros.php?id_vopr=$id_vopr";
parse_url($url);
Только догадываться могу, зачем ЭТО.

Если бы вы понимали, что в стартовом посте сами написали про два разных подхода, то, возможно, и поняли бы, что вам отвечают про разное. Хотя вряд ли, т.к. я вам указывал на это раздвоение, но бестолку.

DmitriyLutsenko, Вам спасибо, конечно. Но отношение ТС мне стало понятно с его первого обращения ко мне. Тему читают и те, кто понимает, как работает форум, и кому может быть полезно написанное мной.

А тот пост я заминусовал (точнее хотел заминусовать его, но промахнулся; наверное, сказался шок от наглости ТСа ).
1
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
17.05.2024, 19:47  [ТС]
Phantom-84, Вы написали, что можно и без единой точки входа. Но я это и без Вас знала. Я не знала - как. И мои настойчивые уговоры так и не заставили Вас ответить на этот простой вопрос. Вы у меня украли неделю времени. Если Вы не способны ни понять смысл вопроса, ни ответить на него, то, может, это не Ваше?
Адекватный и знающий человек на мой вопрос ответил бы просто:
"Зачем Вам единая точка входа для двух файлов? Лучше используйте GET параметры в этих файлах:
//Проверим, есть ли id_vopr в $_GET
if (isset($_GET["id_vopr"])){
//Если есть выводим из $_GET
$id_vopr = intval($_GET['id_vopr']);
И ссылки на эти файлы в тех файлах, где они нужны:
<a href="vopros.php?id_vopr=' . $row['id_vopr'] . '">' . $row["contentV"] .'</a>
"
Если бы Вы так написали, я бы сэкономила неделю, а Вы получили бы баллы за лучший ответ.
Ну, или просто могли ссылку дать на ту статью, которую я нашла про GET параметры...
Но нет, Вы старательно писали ни о чём. Самое ужасное, что Вы же и другим так же морочите голову и совесть Вас не мучает...
0
 Аватар для DmitriyLutsenko
76 / 62 / 16
Регистрация: 13.07.2020
Сообщений: 262
17.05.2024, 21:26
Цитата Сообщение от Sollita Посмотреть сообщение
Вы у меня украли неделю времени. Если Вы не способны ни понять смысл вопроса, ни ответить на него, то, может, это не Ваше?
Уважаемая Соллита, Вы меня заранее простите за немного резкий тон, просто я хочу донести мысль, что подобные обвинения - моветон.

Вы решили переложить ответственность за полученный ответ спустя неделю после публикации Вашего топика на конкретного участника форума.
Но...Что именно он сделал?
Удалял комменты с готовым ответом?
Может, смог пролезть в Ваш ПК и всячески саботировал работу Вашего проекта?
Да ну вряд ли.

Просто задавал вопросы, как и все. Предлагал свои способы, как и все.

Просто Вы решили переложить поиск решения на свой вопрос на плечи форума, встряли с участником во взаимный обмен "любезностями" вместо самостоятельного поиска способов решения.

То, что Вам спустя неделю дали правильный готовый ответ - просто подарок.
Некоторые мои топики на разных форумах оставались без ответа в течение 2-4-5 недель, пока я сам не находил решение.
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
17.05.2024, 21:49
Цитата Сообщение от Sollita Посмотреть сообщение
Я пишу свой сайт с форумом. Мне нужно, чтобы 2 файла profile.php и vopros.php изменяли своё содержимое в зависимости от id юзера и id вопроса соответственно. И чтобы остальные файлы рнр и с другими расширениями не перенаправлялись на точку входа.
Т.е. мне нужно создать движок на базе данных, если я правильно поняла. Для этого я создала файл .htaccess и файл точки входа vhod.php.
Зачем вам точки входа? У вас всего 2 файла. Используйте GET параметры.
1
Невнимательный
 Аватар для ft4l
3141 / 1351 / 362
Регистрация: 08.02.2013
Сообщений: 7,900
Записей в блоге: 2
17.05.2024, 22:44
Цитата Сообщение от sad67man Посмотреть сообщение
всего 2 файла
я насчитал 5
otvet.php
profile.php
vopros.php
vopross.php
zadavator.php

не считая header.php ))
/// vhod.php вроде отпало

Добавлено через 14 минут
Sollita, ещё усложнение будет если захочется создать подразделы/подфорумы
... так-то +один параметр всего , но для 3-х как минимум файлов, можно для всех

Добавлено через 18 минут
Цитата Сообщение от Sollita Посмотреть сообщение
parse_url($url);
я у себя наверное что-то такое прикручу
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
D:\A\32>php -r "preg_match('#^(/(?>[^/]*/)*)([^?]*)\??([^=&]+(?=&|$))?&?(.*)$#', '/zzz/x.php?x=y&z=a', $m); var_export($m);"
array (
  0 => '/zzz/x.php?x=y&z=a',
  1 => '/zzz/',
  2 => 'x.php',
  3 => '',
  4 => 'x=y&z=a',
)
D:\A\32>php -r "preg_match('#^(/(?>[^/]*/)*)([^?]*)\??([^=&]+(?=&|$))?&?(.*)$#', '/zzz/x.php?asd-8.yuuuu&x=yx=y&z=a', $m); var_export($m);"
array (
  0 => '/zzz/x.php?asd-8.yuuuu&x=yx=y&z=a',
  1 => '/zzz/',
  2 => 'x.php',
  3 => 'asd-8.yuuuu',
  4 => 'x=yx=y&z=a',
)
D:\A\32>php -r "preg_match('#^(/(?>[^/]*/)*)([^?]*)\??([^=&]+(?=&|$))?&?(.*)$#', '/zzz/?otvet-1', $m); var_export($m);"
array (
  0 => '/zzz/?otvet-1',
  1 => '/zzz/',
  2 => '',
  3 => 'otvet-1',
  4 => '',
)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2024, 22:44

Генерация HTML страницы в UTF-8 средствами РНР
Имеется страница: &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;...

Выполнение РНР-файла по запросу определенной html-страницы
При запросе пользователями определенных html-страничек нужно выполнять php-скрипт. Можно, конечно, поменять расширение html-ки на php и...

Вытащить значение из одной страницы и вставить в другую без РНР
Ребята, задача не совсем стандартная, нужно без использования РНР вытащить значение. Суть. есть страница- http://сайт.ru/counter.php...

Подскажите как создать динамические чекбоксы?
Хотел сделать с десяток чекбоксов с лабелами. Для этого нагуглил примерный код: function myCheckboxes(){ var checkboxParent =...

Почему не работает РНР, не могу запустить ни один скрипт на РНР
Помогите начинающему. Установил Apache и РНР. Апач работает нормально. Проблем нет. А вот с РНР проблемы. Не могу запустить ни...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru