Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: работа с файлами
 
 автор: Byte   (18.09.2004 в 22:26)   письмо автору
 
 

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

   
 
 автор: cheops   (18.09.2004 в 22:32)   письмо автору
 
   для: Byte   (18.09.2004 в 22:26)
 

Проблема однозначно с правами доступа к файлу. Проверьте имеет ли право ваш скрипт записывать в файл, если нет, то права следует исправить...

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=158

   
 
 автор: Byte   (18.09.2004 в 23:20)   письмо автору
 
   для: cheops   (18.09.2004 в 22:32)
 

thanks a lot, no more questions :)

   
 
 автор: LimP   (19.09.2004 в 12:33)   письмо автору
 
   для: Byte   (18.09.2004 в 23:20)
 

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

   
 
 автор: Byte   (20.09.2004 в 16:19)   письмо автору
 
   для: LimP   (19.09.2004 в 12:33)
 

теперь буду помнить :), спасибо за рекомендацию :)

кстати, а если на сервере винда стоит, таких проблем нет?

   
 
 автор: LimP   (20.09.2004 в 20:14)   письмо автору
 
   для: Byte   (20.09.2004 в 16:19)
 

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

   
 
 автор: cheops   (20.09.2004 в 20:54)   письмо автору
 
   для: LimP   (20.09.2004 в 20:14)
 

Категорично. Можно найти... мы в начале года работали над проектом на ASP.NET, который разумеется работает только под Windows... Но в РФ это действительно редкость, так как связка IIS+ASP.NET+MSSQL стоит достаточно дорого с их лицензиями на соединения, я удивляюсь как мелкомягких жаба не задушила IIS бесплатно распространять :)))

PS Не смотря на то, что ASP работает только под браузером Internet Explorer всё-таки часть сайтов разрабатывают на нём (тоже сайт Beeline)... Хотя статистика в рунете, в том числе и наша говорит о том, что 98% используют Internet Explorer...

   
 
 автор: cheops   (20.09.2004 в 20:43)   письмо автору
 
   для: 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 каждый малолетний киберпанк разную живность пишет...

   
 
 автор: Byte   (20.09.2004 в 20:13)   письмо автору
 
   для: cheops   (18.09.2004 в 22:32)
 

Я сказал что вопросов более не имею, но я явно ошибался.

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

если я допустим ставлю разрешение перезаписи файла для
all users, это что значить будет? его могут переписывать скрипты находящиеся
на сервере или все и всё?

зарание блягодарен за ответ

   
 
 автор: cheops   (20.09.2004 в 20:28)   письмо автору
 
   для: Byte   (20.09.2004 в 20:13)
 

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

   
 
 автор: Byte   (20.09.2004 в 21:15)   письмо автору
 
   для: cheops   (20.09.2004 в 20:28)
 

спасибо за ответ, в основном идея понятна.

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

и теперь о новых проблемах. вставил я chmod в скрипт,
но при запуске его сообщается, что не может он пользоваться
chmod'ом ну никак. хотя в ручную действительно все получается менять,

и еще вопрос, права на запись и чтения понимаю чего дают, а на исполнение?

этот параметр только для исполняемых файлов используется? что он дает обчному файлу
с данными?

   
 
 автор: cheops   (20.09.2004 в 21:30)   письмо автору
 
   для: Byte   (20.09.2004 в 21:15)
 

>и теперь о новых проблемах. вставил я chmod в скрипт,
>но при запуске его сообщается, что не может он пользоваться
>chmod'ом ну никак. хотя в ручную действительно все
>получается менять,
А что точно пишет?
>и еще вопрос, права на запись и чтения понимаю чего дают, а
>на исполнение?
>этот параметр только для исполняемых файлов используется?
>что он дает обчному файлу
> с данными?
Если злоумышленник получит доступ к этому файлу, например, обнаружив дырку в коде и запишет туда скрипт на Perl или PHP - он может сделать с сайтом всё что угодно - скопировать, удалить, дескредитировать - ничего кроме головной боли разрешение на исполнение не даёт (это не относится к директориям, в которых исполнение эквивалентно разрешению просмотра файлов и поддиректорий - то же в общем ничего хорошего).

PS На Западе Windows-сервера очень распространены, так как сопровождение Windows сервера и UNIX-сервера там то, на то выходит. Идеология примерно следующая работает: платишь за лицензию - получаешь гарантию, что это всё не загнётся в самое ближайшее время, так как стабильность гарантируют милиарды Microsoft, SUN - загибается, а Linux - чёрт его знает, что этим пингвинятникам в голову придёт....
А у нас идеология такая: может сам завтра загнёшься, так зачем платить за лицензию...

   
 
 автор: Byte   (20.09.2004 в 21:40)   письмо автору
 
   для: 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:43)   письмо автору
 
   для: Byte   (20.09.2004 в 21:40)
 

и еще вопрос, что значит символ @, а то я его вставить то вставил, а зачем он не знаю :)

   
 
 автор: LimP   (20.09.2004 в 21:49)   письмо автору
 
   для: 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();
  }
?>

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

   
 
 автор: cheops   (20.09.2004 в 21:53)   письмо автору
 
   для: Byte   (20.09.2004 в 21:43)
 

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

   
 
 автор: cheops   (20.09.2004 в 21:49)   письмо автору
 
   для: Byte   (20.09.2004 в 21:40)
 

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

Стоп, а почему вы меняете права для counter.php, ведь вам же нужен файл counter.dat?

   
 
 автор: Byte   (20.09.2004 в 21:58)   письмо автору
 
   для: cheops   (20.09.2004 в 21:49)
 

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

   
 
 автор: cheops   (20.09.2004 в 22:05)   письмо автору
 
   для: Byte   (20.09.2004 в 21:58)
 

Хм... т.е. в файле 0, как был так и остаётся а в окно браузера выводится 1?

   
 
 автор: Byte   (20.09.2004 в 22:14)   письмо автору
 
   для: cheops   (20.09.2004 в 22:05)
 

так точно, это там и оставалось. все, проблема ушла, когда поменял режим работы с файлом с r+ на a+. правда в голове моей не уложилось почему. ну в общем заработало

   
 
 автор: cheops   (20.09.2004 в 22:27)   письмо автору
 
   для: Byte   (20.09.2004 в 22:14)
 

Там по какой-то причине в начале возникал пробел - который всё и рушил, с "a" он исчез... мистика...

   
 
 автор: Byte   (20.09.2004 в 22:50)   письмо автору
 
   для: cheops   (20.09.2004 в 22:27)
 

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

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

   
 
 автор: cheops   (21.09.2004 в 09:33)   письмо автору
 
   для: Byte   (20.09.2004 в 22:50)
 

Хм... может написать хостеру, описав проблему и попросив совета? Может порядок действий в этом случае другой... Никто лучше их не скажет в чём дело.

   
 
 автор: cheops   (20.09.2004 в 22:13)   письмо автору
 
   для: 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>

Не хотите два раза файл открывать?

   
 
 автор: Byte   (20.09.2004 в 22:18)   письмо автору
 
   для: cheops   (20.09.2004 в 22:13)
 

думаю что не проблема его дважды открывать, но проблема может появиться когда код запустят одновременно с двух или более машин, тогда счетчик будет не очень то правильно считать :)

   
 
 автор: Byte   (06.10.2004 в 23:26)   письмо автору
 
   для: Byte   (20.09.2004 в 22:18)
 

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

   
 
 автор: cheops   (06.10.2004 в 23:35)   письмо автору
 
   для: Byte   (06.10.2004 в 23:26)
 

1) Функция chown() позволяет менять владельца.
2) Если разрешить всем пользователям писать в папку, это будет относится только к пользователям данного сервера, в данном случае скриптам других сайтов, но только в том случае, если на пути к файлу им разрешено просматривать все директории. Обычно это не так и директория в которой расположен ваш виртуальный хост доступна только вам (ну и root).
3) Скриптам с других машин обычно обратиться нельзя, тем более на хостинге... только "пользователям" данного хоста...
4) В принципе здоровая параноя всегда приветствуется :))), тем более когда сервер предоставляет услуги SSH, когда пользователями выступают не скрипты, а вполне живые люди, поэтому последнюю цифру (да и вторую тоже) в правах доступа лучше всегда делать нулём...

http://www.softtime.ru/dic/id_dic=158&id_group=6

   
 
 автор: Byte   (07.10.2004 в 04:24)   письмо автору
 
   для: cheops   (06.10.2004 в 23:35)
 

Извните за назойливость, но можно немного подробнее?
имя овнера в этой функции это что? имя скрипта?

   
 
 автор: cheops   (07.10.2004 в 10:31)   письмо автору
 
   для: Byte   (07.10.2004 в 04:24)
 

Нет, это имя UNIX-пользователя от которого действуют ваши скрипты, который назначает вам хостер. Если у вас на хостинге есть база данных, то это имя совпадает с именем пользователя базы данных (у нас, например, softtime). Другому клиенту хостеры назначают другое имя. Вам практически не имеет смысла пользоваться этой функцией так как ваши скрипты так и так действуют от имени вашего пользователя, а доступа к другим учётным записям на сервере у вас скорее всего нет, как у владельцев других учётных записей нет доступа к вашей учётной записи. Единственный кто имеет доступ ко всем файлам и учётным записям это суперпользователь - root.

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

   
 
 автор: Byte   (07.10.2004 в 16:14)   письмо автору
 
   для: cheops   (07.10.2004 в 10:31)
 

Ок, т.е. выходит, что каждый из моих скриптов есть овнер?

   
 
 автор: cheops   (07.10.2004 в 16:44)   письмо автору
 
   для: Byte   (07.10.2004 в 16:14)
 

Скорее наоборот :), вы являетесь владельцем каждого из ваших скриптов.

   
 
 автор: Byte   (07.10.2004 в 18:32)   письмо автору
 
   для: cheops   (07.10.2004 в 16:44)
 

Ну да, верно :).

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования