Определение ОС и Броузеров

antidoto

Guest
Коль тема про браузеры... Может, сможете помочь.
Есть два скрипта -- один создан давно, второй вчера. В обоих я определяю переменную $browser = $_SERVER ["HTTP_USER_AGENT"]. В новом скрипте эта переменная массива не определяется. Делаю print_r ($_SERVER) в каждом скрипте. И тут начинается самое смешное.

Старый скрипт:

Array (
[DOCUMENT_ROOT] => /mnt/hdb7/home/commentator/www
[HTTP_ACCEPT] => text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 [HTTP_ACCEPT_CHARSET] => windows-1251,utf-8;q=0.7,*;q=0.7
[HTTP_ACCEPT_ENCODING] => gzip,deflate
[HTTP_ACCEPT_LANGUAGE] => ru
[HTTP_CACHE_CONTROL] => max-age=0
[HTTP_CONNECTION] => keep-alive
[HTTP_HOST] => viewpoint
[HTTP_KEEP_ALIVE] => 300
[HTTP_USER_AGENT] => Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 Debian/1.7.8-1 [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
[REDIRECT_STATUS] => 200
[REDIRECT_URL] => /
[REMOTE_ADDR] => 127.0.0.3
[REMOTE_PORT] => 32930
[SCRIPT_FILENAME] => /mnt/hdb7/home/commentator/www/index.php
[SERVER_ADDR] => 127.0.0.3
[SERVER_ADMIN] => [email protected]
[SERVER_NAME] => viewpoint
[SERVER_PORT] => 80
[SERVER_SIGNATURE] =>
Apache/1.3.33 Server at viewpoint Port 80
[SERVER_SOFTWARE] => Apache/1.3.33 (Unix) PHP/5.1.0b2
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] =>
[REQUEST_URI] => /
[SCRIPT_NAME] => /index.php
[PATH_TRANSLATED] => /mnt/hdb7/home/commentator/www/index.php
[PHP_SELF] => /index.php
[REQUEST_TIME] => 1127722949
[argv] => Array ( ) [argc] => 0 )

Новый скрипт:

Array (
[DOCUMENT_ROOT] => /mnt/hdb7/home/antidoto/www
[HTTP_HOST] => antidoto
[PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
[REMOTE_ADDR] => 127.0.0.4
[REMOTE_PORT] => 32942
[SCRIPT_FILENAME] => /mnt/hdb7/home/antidoto/www/blocks/head.php
[SERVER_ADDR] => 127.0.0.4
[SERVER_ADMIN] => [email protected]
[SERVER_NAME] => antidoto
[SERVER_PORT] => 80
[SERVER_SIGNATURE] => Apache/1.3.33 Server at antidoto Port 80
[SERVER_SOFTWARE] => Apache/1.3.33 (Unix) PHP/5.1.0b2
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.0
[REQUEST_METHOD] => GET
[QUERY_STRING] =>
[REQUEST_URI] => /blocks/head.php
[SCRIPT_NAME] => /blocks/head.php
[PATH_TRANSLATED] => /mnt/hdb7/home/antidoto/www/blocks/head.php
[PHP_SELF] => /blocks/head.php
[REQUEST_TIME] => 1127723083
[argv] => Array ( ) [argc] => 0 )

Версия PHP -- 5.1.0b2.
Что за бред? Почему он не видит всех переменных?
 

antidoto

Guest
На viewpoint всё нормально, он всё понимает. Дело в сервере?

-~{}~ 27.09.05 13:39:

Настройка виртуальных хостов вроде правильная...
 

whirlwind

TDD infected, paranoid
такое ощущение, что первый - это браузер, а второй это fopen('http://...). Если код разный (даже не принципиально), но разный, так и надо говорить.
 

antidoto

Guest
Один и тот же код на разных хостах работает по-разному. На antidoto неправильно, на viewpoint правильно.
 

kvf77

Red Devil
antidoto

тут нет правильно и неправильно - я так понимаю большинство параметров которые тебе надо совсем от PHP не зависят, а зависят от Apache и ещи с ним - поэтому какие переменные тебе дали доступными - такие и есть, PHP тут не причем
 

whirlwind

TDD infected, paranoid
Чудес не бывает. Вопросов бы не возникло, если бы оба SCRIPT_NAME были идентичны. Очень похоже на то, что ты хочешь выделить какие то блоки из страницы (хидер,футер, етс). При чем абсолютно неизвестно как эти блоки подключаются. И версии протоколов разные. Значит либо обращение разное, либо код разный, либо виртуальные хосты настроены по разному (rewrite rules, etc). Остается только одно - смотреть код.
 

antidoto

Guest
Автор оригинала: kvf77
antidoto

тут нет правильно и неправильно - я так понимаю большинство параметров которые тебе надо совсем от PHP не зависят, а зависят от Apache и ещи с ним - поэтому какие переменные тебе дали доступными - такие и есть, PHP тут не причем
Да, я понимаю, спасибо, что поправил. Следует так, наверное, сказать: почему-то витуальный хост antidoto оказался настроенным иначе, чем viewpoint.

Чудес не бывает. Вопросов бы не возникло, если бы оба SCRIPT_NAME были идентичны. Очень похоже на то, что ты хочешь выделить какие то блоки из страницы (хидер,футер, етс). При чем абсолютно неизвестно как эти блоки подключаются. И версии протоколов разные. Значит либо обращение разное, либо код разный, либо виртуальные хосты настроены по разному (rewrite rules, etc). Остается только одно - смотреть код.
Ага, начинаю понимать. Протоколы я и не приметила.
Я проверяла работу нового скрипта на двух хостах. На хосте viewpoint (ты совершенно прав, я подключаю head) скрипт head.php работает корректно, то есть нет проблем с настройками Apache.
Код выложу вечером.
 

kvf77

Red Devil
antidoto

виртуальные хосты могут висеть ваще на разных apache поэтому настройки и не совпадают, могут и на одном висеть, но тоже не факт, что они настроены одинаково
 

antidoto

Guest
Скрипт head.php (по поводу пустых строк и переводов каретки не придираться -- мне так удобнее потом читать, что наваяла):

class Head

{

# "Reserve" variables:

private $browser;

private $html_beg;

private $head_beg;

private $head_end;

private $title;

private $meta_keywords;

private $meta_charset;

private $meta_desc;

private $link_st;

# The constructor defines the variales:

public function __construct ()

{

$this -> html_beg = "<html>\n";

$this -> head_beg = "\n<head>\n";

$this -> head_end = "\n</head>\n";

$this -> title = "\n<title>A title</title>\n";

$this -> meta_charset = "\n<meta hhtp_equiv=\"Content-Type\" content=\"text/html; charset=KOI8-R\">\n";

$this -> meta_keywords = "\n<meta name=\"keywords\" content=\"some_keywords">\n";

$this -> meta_desc = "\n<meta name=\"description\" content=\"Site_description\">\n";

}

# The function browser () defines the browser of a user:

public function browser ()

{

# Get the User Agent from a global array:

$this -> browser = $_SERVER["HTTP_USER_AGENT"];

# It's just for checking the server variables:

#print_r ($_SERVER);

# Get the name of a browser:

if (preg_match ("/msie/i", $this -> browser) && preg_match ("/opera/i", $this -> browser) && !preg_match ("/linux/i", $this -> browser))

{$this -> link_st = "\n<link rel=\"stylesheet\" type=\"text/css\" href=\"http://antidoto/styles/opera_win.css\">\n";}

elseif (preg_match ("/msie/i", $this -> browser) && preg_match ("/opera/i", $this -> browser) && preg_match ("/linux/i", $this -> browser))

{$this -> link_st = "\n<link rel=\"stylesheet\" type=\"text/css\" href=\"http://antidoto/styles/opera_lin.css\">\n";}

elseif (preg_match ("/msie/i", $this -> browser) && !preg_match ("/opera/i", $this -> browser))

{$this -> link_st = "\n<link rel=\"stylesheet\" type=\"text/css\" href=\"http://antidoto/styles/ie.css\">\n";}

elseif (preg_match ("/mozilla/i", $this -> browser) && !preg_match ("/msie/i", $this -> browser))

{$this -> link_st = "\n<link rel=\"stylesheet\" type=\"text/css\" href=\"http://antidoto/styles/mozilla.css\">\n";}

}

# The function head_show ()places all head-parts into their places:

public function head_show ()

{

# Echo the parts of a head into the right way:

echo $this-> html_beg;

echo $this -> head_beg;

echo $this -> title;

echo $this -> meta_charset;

echo $this -> meta_keywords;

echo $this -> meta_desc;

echo $this -> link_st;

}

}

#--------------- EOC Head -----------------#
#------------------------------------------#

#------------------------------------------#
#----------- Main code --------------------#

$head = new Head;

$head -> browser ();

$head -> head_show ();

#----------- End of main code -------------#
#------------------------------------------#

-~{}~ 28.09.05 00:06:

### Section 1: Global Environment

ServerType standalone


ServerRoot "/usr/local/apache/apache_1.3.33/"


PidFile logs/httpd.pid


ScoreBoardFile logs/apache_runtime_status

Timeout 300

KeepAlive On


MaxKeepAliveRequests 100


KeepAliveTimeout 15


MinSpareServers 1
MaxSpareServers 1


StartServers 1


MaxClients 150


MaxRequestsPerChild 0


### Section 2: 'Main' server configuration

Port 80


User nobody
Group "#-1"

ServerAdmin kseniya@kseniya


ServerName localhost


DocumentRoot "/mnt/hdb7/www"


<Directory />
Options Indexes Includes
AllowOverride All
</Directory>


<Directory "/mnt/hdb7/www">

Options Indexes Includes


AllowOverride All


Order allow,deny
Allow from all
</Directory>


<IfModule mod_userdir.c>
UserDir public_html
</IfModule>


#<Directory /home/*/public_html>
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
# <Limit GET POST OPTIONS PROPFIND>
# Order allow,deny
# Allow from all
# </Limit>
# <LimitExcept GET POST OPTIONS PROPFIND>
# Order deny,allow
# Deny from all
# </LimitExcept>
#</Directory>


<IfModule mod_dir.c>
DirectoryIndex index.php

</IfModule>


AccessFileName .htaccess


<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>


UseCanonicalName On


<IfModule mod_mime.c>
TypesConfig conf/mime.types
</IfModule>


DefaultType text/plain


<IfModule mod_mime_magic.c>
MIMEMagicFile conf/magic
</IfModule>


HostnameLookups Off


ErrorLog logs/error_log


LogLevel warn


LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent


CustomLog logs/access_log common


ServerSignature On


<IfModule mod_alias.c>


Alias /icons/ "/usr/local/apache/apache_1.3.33/icons/"

<Directory "/usr/local/apache/apache_1.3.33/icons">
Options Indexes MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>


Alias /manual/ "/usr/local/apache/apache_1.3.33/htdocs/manual/"

<Directory "/usr/local/apache/apache_1.3.33/htdocs/manual">
Options Indexes FollowSymlinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>


ScriptAlias /cgi-bin/ "/usr/local/apache/apache|1.3.33/cgi-bin/"

<Directory "/usr/local/apache/apache_1.3.33/cgi-bin">
AllowOverride All
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

</IfModule>

<IfModule mod_autoindex.c>


IndexOptions FancyIndexing


AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^


DefaultIcon /icons/unknown.gif


ReadmeName README.html
HeaderName HEADER.html

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

</IfModule>

<IfModule mod_mime.c>

AddLanguage da .dk
AddLanguage nl .nl
AddLanguage en .en
AddLanguage et .ee
AddLanguage fr .fr
AddLanguage de .de
AddLanguage el .el
AddLanguage he .he
AddCharset ISO-8859-8 .iso8859-8
AddLanguage it .it
AddLanguage ja .ja
AddCharset ISO-2022-JP .jis
AddLanguage kr .kr
AddCharset ISO-2022-KR .iso-kr
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddCharset ISO-8859-2 .iso-pl
AddLanguage pt .pt
AddLanguage pt-br .pt-br
AddLanguage ltz .lu
AddLanguage ca .ca
AddLanguage es .es
AddLanguage sv .sv
AddLanguage cs .cz .cs
AddLanguage ru .ru
AddLanguage zh-TW .zh-tw
AddCharset Big5 .Big5 .big5
AddCharset WINDOWS-1251 .cp-1251
AddCharset CP866 .cp866
AddCharset ISO-8859-5 .iso-ru
AddCharset KOI8-R .koi8-r
AddCharset UCS-2 .ucs2
AddCharset UCS-4 .ucs4
AddCharset UTF-8 .utf8

<IfModule mod_negotiation.c>
LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
</IfModule>

AddType application/x-tar .tgz

AddType application/x-httpd-php .php

AddType text/css .css
AddEncoding x-compress .Z
AddEncoding x-gzip .gz .tgz
#AddType application/x-compress .Z
#AddType application/x-gzip .gz .tgz

AddHandler cgi-script .cgi

AddType text/html .shtml
AddHandler server-parsed .shtml

#AddHandler send-as-is asis

#AddHandler imap-file map

#AddHandler type-map var

</IfModule>
#MetaDir .web

#MetaSuffix .meta

<IfModule mod_setenvif.c>
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0

BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0

</IfModule>

# Virtual Hosts:

NameVirtualHost *:80


<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /mnt/hdb7/home/mayakovsky/www
ServerName mayakovsky
ErrorLog /mnt/hdb7/home/mayakovsky/logs/error_log
CustomLog /mnt/hdb7/home/mayakovsky/logs/access_log common
</VirtualHost>

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /mnt/hdb7/home/commentator/www
ServerName viewpoint
ErrorLog /mnt/hdb7/home/commentator/logs/error_log
CustomLog /mnt/hdb7/home/commentator/logs/access_log common
</VirtualHost>

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /mnt/hdb7/home/antidoto/www
ServerName antidoto
ErrorLog /mnt/hdb7/home/antidoto/logs/error_log
CustomLog /mnt/hdb7/home/antidoto/logs/access_log common
</VirtualHost
 

antidoto

Guest
Так бы и сказал. :) Кстати, может, в этом дело.

$head = "path/head.php";

include $head;

(Где-то в мане вычитала, что так можно.)
 

whirlwind

TDD infected, paranoid
да нет, все правильно.

а сделай перед include $head

echo $_SERVER['HTTP_USER_AGENT']

что покажет?
файлов .htaccess на сайте нигде нету?
и еще, погляди после выполнения нерабочего скрипта, записан ли юзерагент в логфайле?
 

antidoto

Guest
Сделала. Index.php выводит user_agent.
Попробовала подключить head.php с нормальным синтаксисом. Ни фига.
 
Сверху