RayMefise
@RayMefise
Java, PHP, C, C++, C#, .NET, QT

Почему Apache не видит изменений в файлах (не в PHP файлах)?

Добрый день. Попытаюсь максимально подробно описать условия возникновения проблемы.

Имеется машина под управлением лицензионной Windows 8.1
На ней установлен VirtualBox 4.3.26
На VirtualBox установлена консольная версия Opensuse 13.2 с поднятым LAMP сервером
В Opensuse есть папка /srv/www/htdocs/ в которую смотрит Apache2
Имеются несколько виртуальных хостов:
/srv/www/htdocs/vhosts/host1
/srv/www/htdocs/vhosts/host2
/srv/www/htdocs/vhosts/host3
VirtualBox имеет статический IP адрес и в файле hosts на windows прописаны виртуальные хосты host1, host2, host3 ссылающиеся на IP VirtualBox
В виртуальной машине добавлена общая папка D:\\vhosts\
внутри которой папки host1, host2, host3
общая папка подключается в папку /srv/www/htdocs/vhosts/
таким образом папки из windows замещаются папками из Linux
/srv/www/htdocs/vhosts/host1 замещается содержимым D:\\vhosts\host1\
/srv/www/htdocs/vhosts/host2 замещается содержимым D:\\vhosts\host2\
/srv/www/htdocs/vhosts/host3 замещается содержимым D:\\vhosts\host3\
Таким образом получаем что Lamp сервер запущенный под OpenSuse при обращении к виртуальным хостам обращается к файлам на Windows.
Все папки и файлы имеют права 777 и виртуальный хост прекрасно работает с файлами

Теперь суть проблемы.
Если на web сервере (из под винды) изменить любой текстовый файл например CSS или JS то если открыть этот файл через редактор vi на opensuse - изменения будут, а если открыть этот файл в браузере через apache то изменений не будет. Сразу говорю что проблема не в кеше, так как даже если его очищать или заходить через инкогнито все тоже самое. В итоге как бы мы не меняли файл, то сама OpenSuse видит изменения в файле а Apache не видит (не касается PHP файлов) при этом если:
сделать umount /srv/www/htdocs/vhosts/ и примонтировать ее снова
или
открыть файл через vi изменить его под linux и сохранить
или
открыть файл через vi не изменить но выйти командой :wq
или
переименовать файл, попытаться загрузить его через браузер, получить ошибку и потом переименовать обратно
то файл загружается обновленным, но если его снова изменить то все пляски повторяются снова.

Всю голову сломал что это может быть и если честно понятия не имею как это исправить.
В общем в итоге решился обратиться к интернет умам.

apache2ctl -M
Вывод:
Loaded Modules:
 core_module (static)
 access_compat_module (static)
 so_module (static)
 http_module (static)
 mpm_prefork_module (static)
 unixd_module (static)
 systemd_module (static)
 authz_host_module (shared)
 actions_module (shared)
 alias_module (shared)
 auth_basic_module (shared)
 authz_user_module (shared)
 authn_file_module (shared)
 authz_groupfile_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 dir_module (shared)
 include_module (shared)
 log_config_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 setenvif_module (shared)
 status_module (shared)
 userdir_module (shared)
 asis_module (shared)
 rewrite_module (shared)
 php5_module (shared)
 authn_core_module (shared)
 reqtimeout_module (shared)
 authz_core_module (shared)
 socache_shmcb_module (shared)



если скачать файл в самом Linux через wget то он так же будет без изменений, но в конце файла появятся непонятные символы:
через vi если его открыть то там будет ^@^@^@^@
если через notepad++ то какие-то нулы
c60c2484bf954b81b67f763d7dcffd3c.png


вот все сервисы на моей машине
after-local.service                loaded active exited  /etc/init.d/after.local Compatibility
apache2.service                    loaded active running The Apache Webserver
cron.service                       loaded active running Command Scheduler
dbus.service                       loaded active running D-Bus System Message Bus
dm-event.service                   loaded active running Device-mapper event daemon
getty@tty1.service                 loaded active running Getty on tty1
haveged.service                    loaded active running Entropy Daemon based on the HAVEGE algorithm
kmod-static-nodes.service          loaded active exited  Create list of required static device nodes for the current kernel
lvm2-lvmetad.service               loaded active running LVM2 metadata daemon
mysql.service                      loaded active running MySQL server
nscd.service                       loaded active running Name Service Cache Daemon
ntpd.service                       loaded active running NTP Server Daemon
postfix.service                    loaded active running Postfix Mail Transport Agent
rc-local.service                   loaded active exited  /etc/init.d/boot.local Compatibility
sshd.service                       loaded active running OpenSSH Daemon
SuSEfirewall2.service              loaded active exited  SuSEfirewall2 phase 2
SuSEfirewall2_init.service         loaded active exited  SuSEfirewall2 phase 1
systemd-journald.service           loaded active running Journal Service
systemd-logind.service             loaded active running Login Service
systemd-modules-load.service       loaded active exited  Load Kernel Modules
systemd-random-seed.service        loaded active exited  Load/Save Random Seed
systemd-remount-fs.service         loaded active exited  Remount Root and Kernel File Systems
systemd-sysctl.service             loaded active exited  Apply Kernel Variables
systemd-tmpfiles-setup-dev.service loaded active exited  Create static device nodes in /dev
systemd-tmpfiles-setup.service     loaded active exited  Create Volatile Files and Directories
systemd-udev-root-symlink.service  loaded active exited  Rule generator for /dev/root symlink
systemd-udev-settle.service        loaded active exited  udev Wait for Complete Device Initialization
systemd-udev-trigger.service       loaded active exited  udev Coldplug all Devices
systemd-udevd.service              loaded active running udev Kernel Device Manager
systemd-update-utmp.service        loaded active exited  Update UTMP about System Reboot/Shutdown
systemd-user-sessions.service      loaded active exited  Permit User Sessions
systemd-vconsole-setup.service     loaded active exited  Setup Virtual Console
user@0.service                     loaded active running User Manager for UID 0
vboxadd.service                    loaded active exited  LSB: VirtualBox Linux Additions kernel modules
wicked.service                     loaded active exited  wicked managed network interfaces
wickedd-auto4.service              loaded active running wicked AutoIPv4 supplicant service
wickedd-dhcp4.service              loaded active running wicked DHCPv4 supplicant service
wickedd-dhcp6.service              loaded active running wicked DHCPv6 supplicant service
wickedd-nanny.service              loaded active running wicked network nanny service
wickedd.service                    loaded active running wicked network management service daemon



При этом стоит отметить что если изменения сделать в PHP файле причем неважно какие, можно просто чисто html написать, то они сразу отображаются без проблем.

Кроме того если файл размером меньше ~260 байт то все изменения так же моментально проходят. Если файл больше этого размера то проблемы возвращаются.

Еще один забавный факт заключается в том что если сделать файл меньше 260 байт (удалив строки) и изменить, то как и говорилось выше изменения появятся сразу, но если после изменения вернуть строки или дописать другие, то в браузере приходит старый файл до любых изменений.
  • Вопрос задан
  • 1672 просмотра
Решения вопроса 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
xcache, opcache, memcache установлены?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы