Форум SAPE.RU

Форум SAPE.RU (http://forum.sape.ru/index.php)
-   Разработка и сопровождение сайтов (http://forum.sape.ru/forumdisplay.php?f=29)
-   -   Вопросы по php (http://forum.sape.ru/showthread.php?t=23299)

Русская мафия 02.12.2008 15:06

Вопросы по php
 
Можно тут буду спрашивать всё что не понятно в php?

Начал делать себе анализатор захода поисковиков на мой сайт. Для определения поисковика, как я понимаю, необходимо узнать Agent и сравнить его, поисковик ли это. Так вот, какой командой его получить?
Спасибо!

zhegloff 02.12.2008 15:10

$_SERVER["HTTP_USER_AGENT"]

Русская мафия 02.12.2008 15:11

zhegloff, Спасибо! Доделаю скрипт, выложу, может кому пригодиться=)

Русская мафия 03.12.2008 16:55

Подскажите плиз, в чём ошибка?

PHP код:

<?php
    
if (($_SERVER["HTTP_USER_AGENT"]=="Yandex/1.01.001 (compatible; Win16; I)") || ($_SERVER["HTTP_USER_AGENT"]=="Yandex/1.01.001 (compatible; Win16; P)") || ($_SERVER["HTTP_USER_AGENT"]=="Yandex/1.01.001 (compatible;     Win16; H)") || ($_SERVER["HTTP_USER_AGENT"]=="Yandex/1.02.000 (compatible; Win16; F)") || ($_SERVER["HTTP_USER_AGENT"]=="Yandex/1.03.003 (compatible; Win16; D)") || ($_SERVER["HTTP_USER_AGENT"]=="Yandex/1.03.000     (compatible; Win16; M)") || ($_SERVER["HTTP_USER_AGENT"]=="YaDirectBot/1.0 (compatible; Win16; I)") || ($_SERVER["HTTP_USER_AGENT"]=="YandexBlog/0.99.101 (compatible; DOS3.30; Mozilla/5.0; B; robot)") ||     ($_SERVER["HTTP_USER_AGENT"]=="Yandex/2.01.000 (compatible; Win16; Dyatel; C)") || ($_SERVER["HTTP_USER_AGENT"]=="Yandex/2.01.000 (compatible; Win16; Dyatel; Z)") || ($_SERVER["HTTP_USER_AGENT"]=="Yandex/2.01.000     (compatible; Win16; Dyatel; D)") || ($_SERVER["HTTP_USER_AGENT"]=="Yandex/2.01.000 (compatible; Win16; Dyatel; N)") || ($_SERVER["HTTP_USER_AGENT"]=="Opera/9.62 (Windows NT 5.1; U; ru) Presto/2.1.1"))
    {

          
$file fopen("http://ааааааааа.ru/logs/log.txt","a");
          if(!
file)
            {
              print (
"Ошибка открытия файла");
            }
        
fputs $file$_SERVER["HTTP_USER_AGENT"]);
        
fclose ($file);
        print (
"ыыыы");

    }


?>

В файл ничего не записывается, хотя "ыыыы" выводится, т.е. мой браузер подходит под данную проверку и данные должны были записаться. Файл уже создал вручную, поставил права на файл 666, на папку 777. Не помогает.

Апокалипсис 03.12.2008 16:57

Русская мафия, Вы пытаетесь записать в удаленный файл?:) Это невозможно.

Русская мафия 03.12.2008 16:59

Апокалипсис, Мммм, точно, исходя из логики это не возможно :D А как тогда мне на хостинге записать файл?

Апокалипсис 03.12.2008 17:00

Указывать абсолютный путь от корня или относительный.
RTFM: http://ru2.php.net/fopen

kalypah 03.12.2008 17:05

попробуй a+t (не критично), и права на сам файл 777 , на моем хостере именно на файл поставил и норм, тоже писал анализатор заходов пс на сайт и запросы с ПС.
Могу скинуть если интересно, подключается простo include(......)

Добавлено через 1 минуту
кстати наоборот наверное путь указываю относительный, тобой указан в моем понимании абсолютныый ), относительно запускаемого файла (или файла которым подключаешь)

DNA 03.12.2008 17:08

Цитата:

Сообщение от Русская мафия (Сообщение 325928)
PHP код:

<?php
...
          if(!
file)
            {
              print (
"Ошибка открытия файла");
            }
...
?>


$ перед file не забыли? ф-ция file без аттрибутов не работает.

Русская мафия 03.12.2008 17:25

kalypah, Спасибо, не нужно, у меня свои грандиозные планы, под свои нужды:D Спасибо.

DNA, Точно, спасибо. Но это не много дало, теперь просто правильно указывает что не может доступ получить.

Апокалипсис, Прочитал, понял. Вот только не знаю какой у меня путь нужно указать.
Файл log.txt находиться вот тут:
/public_html/гыгы.ru/blocks/logs
Файл со скриптом находиться тут:
/public_html/гыгы.ru/blocks

Пробывал указывать следующие пути:
/public_html/гыгы.ru/blocks/logs/log.txt
/гыгы.ru/blocks/logs/log.txt
/blocks/logs/log.txt
/logs/log.txt
log.txt

Ни один не подошёл. Что делать подскажите?

kalypah 03.12.2008 17:29

Попробуй на файл поставь 777, специально попробывал у меня все корректно записало, путь указывал просто log.txt (на этот файл 777 а не на запускающий скрипт). А то интересно )

DNA 03.12.2008 18:11

Цитата:

Сообщение от Русская мафия (Сообщение 325946)
Файл log.txt находиться вот тут:
/public_html/гыгы.ru/blocks/logs
Файл со скриптом находиться тут:
/public_html/гыгы.ru/blocks

Дык собственно если скрипт из блокс вызывается, тогда...
logs/log.txt

...
И кавычки двойные вместо одинарных без надобности не стоит использовать.

Hanapi 03.12.2008 18:19

/public_html/гыгы.ru/blocks/logs/log.txt
точно должно работать
проверять права на log.txt (must be 777)

zhegloff 03.12.2008 18:47

PHP код:

$_SERVER['DOCUMENT_ROOT'].'/blocks/logs/log.txt' 

Добавлено через 21 минуту
А если еще подумать, то лучше даже
PHP код:

dirname(__FILE__) . '/logs/log.txt' 


Русская мафия 03.12.2008 20:43

zhegloff, Большое спасибо, второй вариант работает!

ahsinis 03.12.2008 20:58

лучше писать в базу, а еще лучше пойти пиво пить, а не анализатор в нулевыми знаниями писать =/ как то таг

Русская мафия 03.12.2008 21:09

ahsinis, Нафиг базу нагружать. А учиться всегда у меня лучше получалось сразу в лоб=)

Hanapi 03.12.2008 21:14

Цитата:

Сообщение от Русская мафия (Сообщение 326040)
zhegloff, Большое спасибо, второй вариант работает!

Значит Ваш путь, который был ранее написан - не верный. Скорее всего, где-то /home/site.ru/public_html.... ну или что-то вроде того

ahsinis 03.12.2008 21:16

потому что, если вы будете писать так как сейчас, то у вас два процесса по#ерят ваш файл в раз

ЗЫ ну раз в лоб, то тогда не мешало еще и SQL поучить

ЗЫЫ если вы уж "отлавливаете" яндекс, то может лучше регулярными выражениями отлавливать, а не колбасу из проверок писать?

Русская мафия 03.12.2008 21:18

Цитата:

Сообщение от DNA (Сообщение 325972)
И кавычки двойные вместо одинарных без надобности не стоит использовать.

А в чём отличие? Ну я знаю как они используются когда ковычки в ковычках, ну а когда по отдельности, какая разница?

DNA 03.12.2008 22:04

Цитата:

Сообщение от Русская мафия (Сообщение 326068)
А в чём отличие? Ну я знаю как они используются когда ковычки в ковычках, ну а когда по отдельности, какая разница?

Строки в одинарных кавычках не проверяются на предмет наличия переменных и спец символов, соответственно обрабатываются быстрее.

Русская мафия 03.12.2008 22:26

Цитата:

Сообщение от DNA (Сообщение 326094)
Строки в одинарных кавычках не проверяются на предмет наличия переменных и спец символов, соответственно обрабатываются быстрее.

Понял, спасибо!

Цитата:

Сообщение от ahsinis (Сообщение 326065)
потому что, если вы будете писать так как сейчас, то у вас два процесса по#ерят ваш файл в раз

Хм, точно. Ну тогда заменю название бота на метку, чтобы размер уменьшить + я каждый день создаю новый файл с датой в имени файла. Всё сделал, работает, осталось скрипт написать для вывода в читабельном виде этой статистики.


Цитата:

Сообщение от ahsinis (Сообщение 326065)
ЗЫ ну раз в лоб, то тогда не мешало еще и SQL поучить

Подучимс=)


Цитата:

Сообщение от ahsinis (Сообщение 326065)
ЗЫЫ если вы уж "отлавливаете" яндекс, то может лучше регулярными выражениями отлавливать, а не колбасу из проверок писать?

Я до такого ещё не добрался=))

sergbond 04.12.2008 06:32

Цитата:

Сообщение от Русская мафия (Сообщение 326108)
Хм, точно. Ну тогда заменю название бота на метку, чтобы размер уменьшить + я каждый день создаю новый файл с датой в имени файла.

Не морочь голову. Пихай статистику в базу - потом любую выборку можно будет сделать. Оно для этого и предназначено.

Deicider 04.12.2008 09:44

Цитата:

Сообщение от sergbond (Сообщение 326286)
Не морочь голову. Пихай статистику в базу - потом любую выборку можно будет сделать. Оно для этого и предназначено.

Поддерживаю! Я сначала тоже с файлами мучился, а потом буквально за один день разобрался, как всё реализовать через SQL. Поверьте, это НАМНОГО проще, чем с файлами, потому что всю работу по выборке делает sql сервер, а Вы лишь пишете запрос, что Вам нужно выбрать. ;)

Апокалипсис 04.12.2008 09:44

Если человек хочет выучить PHP - пусть начнёт с файлов и основ.
А потом уже - изучает SQL.

Deicider 04.12.2008 10:04

Апокалипсис, я тоже пока не большой спец, но освоить на уровне, чтобы просто писать и читать из базы, можно действительно за пару часов. Там всего-то четыре команды select, insert, update и delete. Это действительно проще, чем писать поиск по файлу и запись в файл. SQL я как раз и начал изучать, когда надоели сложности с файлами, а надоели они практически сразу, как только начал учить PHP ))))

Апокалипсис 04.12.2008 10:13

Deicider, Если Вы хотите стать программистом - то Вам необходимо в идеале знать как работать с файлами и SQL.

Цитата:

Сообщение от Deicider (Сообщение 326332)
Там всего-то четыре команды select, insert, update и delete.

угу. кажется просто. Но есть ещё и выборка из 3 - 4 таблиц + логические, арифметические действия и т.п.

Deicider 04.12.2008 10:21

Апокалипсис, я уже давно прекрасно знаю C++, поэтому php требовал лишь немного привыкнуть к синтаксису, а сам язык практически такой же.
Насчет выборок, я и не говорил, что язык ограничивается четырьмя командами, но в для целей, которые нужны ТСу, этого полне достаточно. Где-то в руководстве по SQL встретил такое высказывание, с котрым абсолютно согласен:
Цитата:

SQL это сложный, но интуитивно понятный язык

Апокалипсис 04.12.2008 10:23

Ну естественно для тех кто знает основы любого другого языка - выучить ещё язык - не проблема. По себе знаю:)

Jimi Dini 04.12.2008 11:36

Цитата:

Сообщение от Апокалипсис (Сообщение 326335)
Deicider, Если Вы хотите стать программистом - то Вам необходимо в идеале знать как работать с файлами и SQL.


угу. кажется просто. Но есть ещё и выборка из 3 - 4 таблиц + логические, арифметические действия и т.п.

а работа с файлами - так, чтобы скрипты, запущенные в нескольких потоках - не перезаписали один и тот же файл?
в майсикле это решается на уровне самой бд, а в скрипте придется решать самому. проще выучить несколько запросов - селект, инсерт и апдейт. кстати, на майсикл.ру есть отличный мануал на русском, где все команды собраны по типам (работа со строками, арифметческие, статистические и т.п.)

Надо приучаться делать сразу правильно, а не оставлять на потом.

Wink 04.12.2008 12:50

Прежде всего нужно приучаться доводить начатое до конца, а не кидаться из стороны в сторону только потому что так "проще". Проще, знаете ли, поставить лирушную статистику по ботам или посмотреть заходы ботов в webalizer. Так и получаются вместо программистов "пользователи движков".

Когда человек разберется как следует с работой с файлами, с проблемами, которые при этом возникают, научится эти проблемы решать, тогда можно и SQL попробовать, и сравнить производительность и преимущества обоих вариантов. В плане получения опыта это будет гораздо полезнее.

vvvvv 04.12.2008 13:25

Wink, все правильно пишешь, но! Бизнес в интернете скоротечен. Пока будешь со всем разбираться, можно оказаться на обочине.

Русская мафия 04.12.2008 13:54

Ну мне на первое время сейчас и этого хватит. Просто сейчас все сайты с индекса улетели, нужно посмотреть как яша заходит. А потом можно и до БД добраться.


Цитата:

Сообщение от Апокалипсис (Сообщение 326341)
Ну естественно для тех кто знает основы любого другого языка - выучить ещё язык - не проблема. По себе знаю

В том то и дело что легко идёт, т.к. знаю Делфи и С++, а PHP вообще теперь легко поддаётся=)

Добавлено через 11 минут
А вот такой вопрос возник, почему я могу открыть файл 'www.asdsadsadas.ru/123.txt' а файл 'www.asdsadsadas.ru/23423443232/123.txt' не могу? Где эти права ставятся, или что?

stanbert 04.12.2008 14:22

Цитата:

Сообщение от Русская мафия (Сообщение 326459)
А вот такой вопрос возник, почему я могу открыть файл 'www.asdsadsadas.ru/123.txt' а файл 'www.asdsadsadas.ru/23423443232/123.txt' не могу? Где эти права ставятся, или что?

нельзя открыть файл 'www.asdsadsadas.ru/23423443232/123.txt', т.к. скорее всего нет прав на работу с файлами в директории 'www.asdsadsadas.ru/23423443232'

зайди любым ftp-менеджером и поставь права на директорию 0777...

Hanapi 04.12.2008 14:36

Цитата:

Сообщение от ahsinis (Сообщение 326065)
потому что, если вы будете писать так как сейчас, то у вас два процесса по#ерят ваш файл в раз

а че ж вы не подскажете человеку как создавать локи? самое простое - file_put_contents($lockfile,'1'); до начала записи в файл, и unlink($lockfile); после записи, и проверка на существование файла файла $lockfile перед началом работы с записями - работать дальше если файл не существует, и подождать немного перед повторной попыткой работы с записями - если файл существует..

и вообще, разве вызов файла с аттрибутом "а" потирает записи при двойном обращении? насколько я помню (не работал с файлами с 2000 года), "а" дописывает записи, а "w" потирает файлы перед записью.. так что, если я не ошибаюсь, максимум что тут произойдет - это пропадет одна из записей, при двойном обращении, не?

ahsinis 04.12.2008 15:05

Hanapi, не городите огород, самое простое flock, решение, которому уже несколько десятилетий - пример можно посмотреть в коде сапы. Но эта проблема на самом деле не такая простая - помоему, на windows это не работает (в windows используется другой способ блокировки, не знаю, насколько в php эта функция отрабатывает). Поэтому многопоточные записи в файл опасные вещи. Правда тут следует отметить, что в данном случае коллизий скорее всего не будет, т.к. у ТС отсекаются все посетители кроме яндекса, а он врядли будет одновременно в несколько потоков страницы сайта запрашивать. Хотя кто его знает... :rolleyes:

zhegloff 04.12.2008 15:07

Цитата:

Сообщение от ahsinis (Сообщение 326532)
а он врядли будет одновременно в несколько потоков страницы сайта запрашивать

Запросто... Та еще сволочь :)

Русская мафия 04.12.2008 15:13

Цитата:

Сообщение от ahsinis (Сообщение 326532)
Правда тут следует отметить, что в данном случае коллизий скорее всего не будет, т.к. у ТС отсекаются все посетители кроме яндекса, а он врядли будет одновременно в несколько потоков страницы сайта запрашивать.

Вот я думаю поэтому можно не волноваться=)

Добавлено через 43 секунды
Цитата:

Сообщение от zhegloff (Сообщение 326535)
Запросто... Та еще сволочь

Хм...

Добавлено через 3 минуты
Цитата:

Сообщение от stanbert (Сообщение 326498)
айди любым ftp-менеджером и поставь права на директорию 0777...

И так стоит.

Алексей Барыкин 04.12.2008 15:15

А ещё очень полезно использовать опыт предыдущих поколений, дабы изобретение велосипедов приносило пользу.
http://www.gcmsite.ru/?pg=art&id=search-spiders - хватает, чтобы прикинуть заходил ли сегодня Яша.

Русская мафия 04.12.2008 15:20

Алексей Барыкин, Ну я почти тоже самое уже написал, только для одного яши, но у меня и ещё показывает какой именно бот заходил. Ну а так тоже самое.


Часовой пояс GMT +3, время: 07:40.

Работает на vBulletin® версия 3.8.7.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
SAPE.RU — система купли-продажи ссылок с главных и внутренних страниц сайтов.