|
|
|
| у меня проблема с файлами. на сервере который
дает мне хостинг я разместил сраничку со скриптом
который счетчиком является. счнтик банальный учебный.
просто в файле храниться значение количества вызовов скрипта
соответсвенно странички. но сервер не дает скрипту открывать
файл на запись. на своей машине проверял все работает, а
вот что делать с сервером настоящим? как обычно поступают в таких ситуациях? | |
|
|
|
|
|
|
|
для: Byte
(18.09.2004 в 22:26)
| | Проблема однозначно с правами доступа к файлу. Проверьте имеет ли право ваш скрипт записывать в файл, если нет, то права следует исправить...
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=158 | |
|
|
|
|
|
|
|
для: cheops
(18.09.2004 в 22:32)
| | thanks a lot, no more questions :) | |
|
|
|
|
|
|
|
для: Byte
(18.09.2004 в 23:20)
| | ну на серваке же юникс стоит,а тама шмоды надо обязательно на скрипты выставлять,это везде так,ты запомни... | |
|
|
|
|
|
|
|
для: LimP
(19.09.2004 в 12:33)
| | теперь буду помнить :), спасибо за рекомендацию :)
кстати, а если на сервере винда стоит, таких проблем нет? | |
|
|
|
|
|
|
|
для: Byte
(20.09.2004 в 16:19)
| | ну у тебя же на локале шмодов нет,почему это доолжно быть на серваке,да щас и нигде не найдешь сервак под винду....эт тоже запомни... | |
|
|
|
|
|
|
|
для: LimP
(20.09.2004 в 20:14)
| | Категорично. Можно найти... мы в начале года работали над проектом на ASP.NET, который разумеется работает только под Windows... Но в РФ это действительно редкость, так как связка IIS+ASP.NET+MSSQL стоит достаточно дорого с их лицензиями на соединения, я удивляюсь как мелкомягких жаба не задушила IIS бесплатно распространять :)))
PS Не смотря на то, что ASP работает только под браузером Internet Explorer всё-таки часть сайтов разрабатывают на нём (тоже сайт Beeline)... Хотя статистика в рунете, в том числе и наша говорит о том, что 98% используют Internet Explorer... | |
|
|
|
|
|
|
|
для: Byte
(20.09.2004 в 16:19)
| | Windows-хостинг не принят, так как считается, что Windows не лучшая система для организации сервера. Это свзано со следующими причинами:
1) UNIX с самого начала проектировалась как сетевая многопользовательская операционная система, в то время как Windows нет.
2) UNIX ведёт свою историю с 1970 года, в то время как Windows нет и 20 лет, поэтому в мире системных администраторов знакомых с UNIX много больше, чем с Windows.
3) В Windows встроен графический интерфейс, что вовсе не требуется для сервера, так как это лишняя память столь необходимая для сервера, а UNIX действует на манер Windows 3.1, у него система X Window лишь надстройка которую можно даже не устанавливать, не то что запускать...
4) UNIX сейчас мало кто знает - поэтому боятся и уважают :))), а под Windows каждый малолетний киберпанк разную живность пишет... | |
|
|
|
|
|
|
|
для: cheops
(18.09.2004 в 22:32)
| | Я сказал что вопросов более не имею, но я явно ошибался.
на что влияют разограничения доступа к файлу и кто его
переписывать и т.д. может? не могли бы прокоментировать?
если я допустим ставлю разрешение перезаписи файла для
all users, это что значить будет? его могут переписывать скрипты находящиеся
на сервере или все и всё?
зарание блягодарен за ответ | |
|
|
|
|
|
|
|
для: Byte
(20.09.2004 в 20:13)
| | Большого значения это не имеет, так как на сервере пользователи существуют только номинально (реально там не работают, если только нет доступа к SSH)... Теоретически скрипты других пользователей могут перезаписывать файл, но даже если бы они знали о его существовании, вряд ли они смогли это сделать так как доступа к папке, где расположен ваш виртуальный хост они обычно не имеют. | |
|
|
|
|
|
|
|
для: cheops
(20.09.2004 в 20:28)
| | спасибо за ответ, в основном идея понятна.
кстати про виндовс-серверы. я сейчас нахожусь
в Канаде и поверте, этого добра тут
более чем достаточно, это даже подается в
виде сервиса, при регистрации хостинга
у вас спрашивают, какой сервер вы хотите.
и теперь о новых проблемах. вставил я chmod в скрипт,
но при запуске его сообщается, что не может он пользоваться
chmod'ом ну никак. хотя в ручную действительно все получается менять,
и еще вопрос, права на запись и чтения понимаю чего дают, а на исполнение?
этот параметр только для исполняемых файлов используется? что он дает обчному файлу
с данными? | |
|
|
|
|
|
|
|
для: Byte
(20.09.2004 в 21:15)
| | >и теперь о новых проблемах. вставил я chmod в скрипт,
>но при запуске его сообщается, что не может он пользоваться
>chmod'ом ну никак. хотя в ручную действительно все
>получается менять,
А что точно пишет?
>и еще вопрос, права на запись и чтения понимаю чего дают, а
>на исполнение?
>этот параметр только для исполняемых файлов используется?
>что он дает обчному файлу
> с данными?
Если злоумышленник получит доступ к этому файлу, например, обнаружив дырку в коде и запишет туда скрипт на Perl или PHP - он может сделать с сайтом всё что угодно - скопировать, удалить, дескредитировать - ничего кроме головной боли разрешение на исполнение не даёт (это не относится к директориям, в которых исполнение эквивалентно разрешению просмотра файлов и поддиректорий - то же в общем ничего хорошего).
PS На Западе Windows-сервера очень распространены, так как сопровождение Windows сервера и UNIX-сервера там то, на то выходит. Идеология примерно следующая работает: платишь за лицензию - получаешь гарантию, что это всё не загнётся в самое ближайшее время, так как стабильность гарантируют милиарды Microsoft, SUN - загибается, а Linux - чёрт его знает, что этим пингвинятникам в голову придёт....
А у нас идеология такая: может сам завтра загнёшься, так зачем платить за лицензию... | |
|
|
|
|
|
|
|
для: cheops
(20.09.2004 в 21:30)
| | вот мой злополучный код:
<html>
<body>
<?
chmod("counter.php",0666);
$f=fopen("counter.dat","r+");
if (($f)!=0)
flock($f,LOCK_EX);
$count=fread($f,100);
@$count=$count+1;
ftruncate($f,0);
fwrite($f,$count);
fflush($f);
flock($f,LOCK_UN);
fclose($f);
echo($count);
?>
</body>
</html>
|
вот какой результат выдает:
Warning: chmod(): Operation not permitted in /home2/antonmy/public_html/counter1.php on line 4
1
т.е. значение счетчика нифига не меняется и вообще все плохо :(
шучу :) , но в чем дело очень хотелось бы знать | |
|
|
|
|
|
|
|
для: Byte
(20.09.2004 в 21:40)
| | и еще вопрос, что значит символ @, а то я его вставить то вставил, а зачем он не знаю :) | |
|
|
|
|
|
|
|
для: Byte
(20.09.2004 в 21:43)
| | если написать этот символ перед какой-нибудь функцией и она выполнится неправильно,интерпретатор вам не выдаст ошибку а промолчит как партизан,это удобно для отслеживания ошибок...например если пишем вот так:
<?php
// Имя сервера базы данных
$dblocation = "localhost";
// Имя базы данных, на вашем хостинге или локальной машине
$dbname = "guestbook";
// Имя пользователя...
$dbuser = "root";
// Пароль
$dbpasswd = "";
// Соединяемся с сервером базы данных
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx) {
echo( "<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>" );
exit();
}
// Выбираем базу данных
if (! @mysql_select_db($dbname,$dbcnx) ) {
echo( "<P>В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.</P>" );
exit();
}
?>
|
вот,ну я думаю,тут здесь все понятно,мы пытаемся соединиться с базой данных и подавляем ошибки,а если они происходят,выводим свои,тем самым мы уже знаем,где и в каком именно месте нужно править код... | |
|
|
|
|
|
|
|
для: Byte
(20.09.2004 в 21:43)
| | @ - это подавление вывода сообщений в окно браузера, если функция не может выполнить операцию, как chmod() - она выводит предупреждение - запретить такой вывод можно добавив символ @ перед вызовом. Это необходимо в ряде случае, например, если вы сами хотите обработать ошибку, а случайный вывод функции может нарушить дизайн страницы... | |
|
|
|
|
|
|
|
для: Byte
(20.09.2004 в 21:40)
| | Так а файл в котором расположен этот код имеет право менять права доступа для других файлов... Вообще говоря права следует установить только один раз (не обязательно вызывать функцию chmod каждый раз) и если вы можете это сделать вручную, так и следует поступить.
Стоп, а почему вы меняете права для counter.php, ведь вам же нужен файл counter.dat? | |
|
|
|
|
|
|
|
для: cheops
(20.09.2004 в 21:49)
| | менял для коунтер.пхп от нечнго делать, потому что для .дат то же самое говорится.
вручную по моему все работает, в смысле свойства я таки могу поменять, но почему то сам код в итоге не работает, на локальной машине все в порядке, ну и плюс хотелось выяснить все же, почему не получается менять свойств непосредственно из кода. | |
|
|
|
|
|
|
|
для: Byte
(20.09.2004 в 21:58)
| | Хм... т.е. в файле 0, как был так и остаётся а в окно браузера выводится 1? | |
|
|
|
|
|
|
|
для: cheops
(20.09.2004 в 22:05)
| | так точно, это там и оставалось. все, проблема ушла, когда поменял режим работы с файлом с r+ на a+. правда в голове моей не уложилось почему. ну в общем заработало | |
|
|
|
|
|
|
|
для: Byte
(20.09.2004 в 22:14)
| | Там по какой-то причине в начале возникал пробел - который всё и рушил, с "a" он исчез... мистика... | |
|
|
|
|
|
|
|
для: cheops
(20.09.2004 в 22:27)
| | да, пробел действительно мистический, я его тоже узрел и был удивлен.
а в отношениии файлов есть еще вопросы. хотя они наврное связаны как раз с chmod'ом. если я загружаю файл на сервер все без вопросов загружается, но я не могу файл этот копировать из временной директории в место мне необходимое по той же причине ограничения прав доступа. так как же заставить чмод работать из кода? | |
|
|
|
|
|
|
|
для: Byte
(20.09.2004 в 22:50)
| | Хм... может написать хостеру, описав проблему и попросив совета? Может порядок действий в этом случае другой... Никто лучше их не скажет в чём дело. | |
|
|
|
|
|
|
|
для: Byte
(20.09.2004 в 21:58)
| | Вы знаете у меня ваш код себя очень странно на локальной машине ведёт - по крайней мере считает не так как от него ожидается... Почему бы вам не использовать следующий вариант:
<html>
<body>
<?
$f=fopen("counter.dat","r");
$count=fread($f,filesize("counter.dat"));
fclose($f);
$count=$count+1;
$f=fopen("counter.dat","w");
flock($f,LOCK_EX);
fwrite($f,$count);
flock($f,LOCK_UN);
fclose($f);
echo($count);
?>
</body>
</html>
|
Не хотите два раза файл открывать? | |
|
|
|
|
|
|
|
для: cheops
(20.09.2004 в 22:13)
| | думаю что не проблема его дважды открывать, но проблема может появиться когда код запустят одновременно с двух или более машин, тогда счетчик будет не очень то правильно считать :) | |
|
|
|
|
|
|
|
для: Byte
(20.09.2004 в 22:18)
| | Привет всем еще раз. Возник новый вопрос относительно
работы с файлами на сервере с юниксом. Как обяснить директории
кто ее овнер? я так понимаю, что если выставить на папку разрешение писать в нее свем юзверям, то любой скрипт, с любого сервера может в эту папку чего-то записать, если будет знать о ее существовании конечно, так ли это?
и если так, то как ограничить это безобразие? | |
|
|
|
|
|
|
|
для: Byte
(06.10.2004 в 23:26)
| | 1) Функция chown() позволяет менять владельца.
2) Если разрешить всем пользователям писать в папку, это будет относится только к пользователям данного сервера, в данном случае скриптам других сайтов, но только в том случае, если на пути к файлу им разрешено просматривать все директории. Обычно это не так и директория в которой расположен ваш виртуальный хост доступна только вам (ну и root).
3) Скриптам с других машин обычно обратиться нельзя, тем более на хостинге... только "пользователям" данного хоста...
4) В принципе здоровая параноя всегда приветствуется :))), тем более когда сервер предоставляет услуги SSH, когда пользователями выступают не скрипты, а вполне живые люди, поэтому последнюю цифру (да и вторую тоже) в правах доступа лучше всегда делать нулём...
http://www.softtime.ru/dic/id_dic=158&id_group=6 | |
|
|
|
|
|
|
|
для: cheops
(06.10.2004 в 23:35)
| | Извните за назойливость, но можно немного подробнее?
имя овнера в этой функции это что? имя скрипта? | |
|
|
|
|
|
|
|
для: Byte
(07.10.2004 в 04:24)
| | Нет, это имя UNIX-пользователя от которого действуют ваши скрипты, который назначает вам хостер. Если у вас на хостинге есть база данных, то это имя совпадает с именем пользователя базы данных (у нас, например, softtime). Другому клиенту хостеры назначают другое имя. Вам практически не имеет смысла пользоваться этой функцией так как ваши скрипты так и так действуют от имени вашего пользователя, а доступа к другим учётным записям на сервере у вас скорее всего нет, как у владельцев других учётных записей нет доступа к вашей учётной записи. Единственный кто имеет доступ ко всем файлам и учётным записям это суперпользователь - root.
PS Данная функция актуальна, когда сервер находится в полном распоряжении команды Web-разработчиков для управления учётными записями и принадлежащим им файлам. | |
|
|
|
|
|
|
|
для: cheops
(07.10.2004 в 10:31)
| | Ок, т.е. выходит, что каждый из моих скриптов есть овнер? | |
|
|
|
|
|
|
|
для: Byte
(07.10.2004 в 16:14)
| | Скорее наоборот :), вы являетесь владельцем каждого из ваших скриптов. | |
|
|
|
|
|
|
|
для: cheops
(07.10.2004 в 16:44)
| | Ну да, верно :). | |
|
|
|