Доступ к файлам
Помогите чайнику!! Принялся изучать PHP - все поставил Апач SQL PHP под WInXP. Все ратало - и вот обнаруживаю глюк.Простой скрипт (проходит каталог сайта в поиске файла и выводит содержимое). До поры времени (испытательный каталог) с несколькими файлами обрабатывался нормально. Потом в тот же каталог добавляю другие файлы (с этого компа) - и все - выдает на вновь добаленных файлах ошибку доступа
failed to open stream: No such file or directory in
Перечитал все мануалы, подспудно панимаю что гдето регулируется доступ (но почему для одних файлов доступ имеется). Притом если "нормальные " файлы переименовываю или копирую - таже ошибка.
4 сутки сижу и дичаю от бессилия:(
Или возможно криво поставились PHP&Apache.
Также, надеюсь, вы не Денвер ставили, так как там вообще все "довольно странно" работает.
<?Php
///Функция контроля совпадения строки с шаблоом
//Пробелы считаются как элемент или
//*-любое слово ; = перечисление
function LSD_CheckStr($strSrc,$strFind){
$s0=strtoupper($strSrc);
$dwLenFind=strlen($strFind);
$dwFirstChar=strchr($s0,strtoupper($strFind[0])); //Получаем вхождение первого символа строки
$strSub=substr($strSrc,$dwFirstChar,$dwLenFind);
return (strcmp($strSub,strtoupper($strFind))==0);
}
//Функция печати результатов
function LSD_PrintLink($strFile,$strComment){
//печатаем в параграф
$result= "<p align=\"left\"><A HREF=\"$strFile\" target=_Main>$strFile</A><BR>";
$result.=$strComment."</p><br>";
return($result);
}
// Функция выдачи результатов каталога с описание м файлов
function LSD_GetDir($strPath,$strFind){
if (is_dir($strPath)) {
echo $strPath;
if ($hCurDir = opendir($strPath)) {
while (($strFile = readdir($hCurDir)) !== false) {
if ( ($strFile != ".") && ($strFile != "..") ) {
//Проверка на каталог
if (is_dir($strFile)){
$NewDir=$strPath.$strFile;
echo $NewDir;
//LSD_GetDir($NewDir,$strFind,&$arrTypeExcl);
}
else{
//Проверка самого имени файла
$boolFind =LSD_CheckStr($strFile,$strFind);
if (!$boolFind){
//Выполнение операций с файлами
//цикл построчного чтения из файла согласно типу
echo $strFile."<br>";
$hFile = fopen($strFile, "r");
while (!feof($hFile) &&($boolFind!=True)) {
$strBuff = fgets($hFile, 4096);
//Контроль строки
$boolFind =LSD_CheckStr($strBuff,$strFind);
}
fclose($hFile);
}
//Печать найденного в зависимости от типа
if ($boolFind) {
$hFile = fopen($strFile, "r");
$strBuff = fread($hFile, 255);
$strBuff.=chr(0);
fclose($hFile);
//sprintf('%s\n',$strBuff);
//echo $strBuff;
echo LSD_PrintLink($strFile,"");
}
}
}
}
closedir($hCurDir);
}
}
}
///Объявление массива данных инициализации
$strHeader="<html><head><title>";
$strHeaderFromTitle="</title><base target=\"_Main\"></head><body>";
$strFooter="</body></html>";
echo $strHeader;
echo "Результат поиска";
echo $strHeaderFromTitle;
echo "Start";
$strPath="e:/webserver/files/exempl/";
$strFind="lsd";
LSD_GetDir($strPath,$strFind);
echo $strFooter;
?>
Выдает ошибку при открытиии файла - притом файлы закаченные в каталог ранее (2 дней назад) - обрабатываются нормально.
Ставил пакет WAMP - там 3 в одном. Поставился нормально
Все настройки нормально вроде работают. С горя начал юзать httpd.conf - никакой реакции
Суть данного скрипта - в том что есть каталог (с подкаталогами - но рекурсия пока отключена) с горой инфы - и ее как то надо систематизировать. Налюбой Делфе это тривиальна - но положение каталога может быть удаленно и приходится использовать веб интерфейс. Поэтому и пробиваю PHP так как каталог большой и может динамически изменятся, а следовательно и генерить страницы надо динамически.
Да такое в башорг нужно оправлять сразу :D
По сабжу... что ты хочешь, если у тебя скрипт формирует неправильные ссылки. От Options Indexes и то больше бы толку было.
Options Indexes даже PHP не требует, так шта ;)
Кроме того не стоит забывать, с какой версии ввели scandir :)
Проблема не в том чтоб увидеть весь каталог - это я и так вижу - в теле цикла переменная имени файла нормально инициализируется. А проблема в том что одни файлы открываются -а другие нет - пишет что не найден
Warning: fopen(read.txt) [function.fopen]: failed to open stream: No such file or directory in E:\WEBSERVER\_SCRIPTS\lsd_search.php on line 42
В чем прикол?!!! Файлы реально существуют, все на локальной машине, работаю с учетной записью администратора. Из за этого цирка даже не знаю стоит ли продолжать проект на данном языке. Помогите новичку разобратся!!!!
А проблема в том что одни файлы открываются -а другие нет - пишет что не найден
Warning: fopen(read.txt) [function.fopen]: failed to open stream: No such file or directory in E:\WEBSERVER\_SCRIPTS\lsd_search.php on line 42
Чудес не бывает. Проблема либо в правах на файл, либо в указании неверного пути до файла. Других вариантов просто нет.
Проблема не в том чтоб увидеть весь каталог - это я и так вижу - в теле цикла переменная имени файла нормально инициализируется. А проблема в том что одни файлы открываются -а другие нет - пишет что не найден
Warning: fopen(read.txt) [function.fopen]: failed to open stream: No such file or directory in E:\WEBSERVER\_SCRIPTS\lsd_search.php on line 42
В чем прикол?!!! Файлы реально существуют, все на локальной машине, работаю с учетной записью администратора. Из за этого цирка даже не знаю стоит ли продолжать проект на данном языке. Помогите новичку разобратся!!!!
100% ты не указал в какой директории брать файл.
UPD: alekciy уже опередил с подсказкой )
----------
Нет файлы находятся в одной директории - только одни открываются а другие нет. Однако имена файлов видны. Диск проверял скандиском -всме в норме. Имена аглицкие 8 букв. Только с правами проблема - как под XP их определить? что атрибуты фалов функция lstat не выдает однозначно. И хозяина чтото под экспихой не просматривается. Я уже совсем дураком стал. Мануал по htaccess скоро на память знать буду - перепробовал все варианты доступа вплоть до полного разрешения на сервак - по барабану. Самый прикол в том что беру тот файл который открывается - копирую в новый под новым именем - таже фигня.
Люди!!!!!!!!!! Это что прикол юникса?!!!!!!!!!!!!
Нет файлы находятся в одной директории - только одни открываются а другие нет.
Не бывает так. Компьютер характерен крайне высокой степенью детерминизма, при прочих равных условиях не бывает так, что один файл открывается, а другой нет. Не бывает и все тут.
Возможно причина в правах на файл, второй варинат это указывается не абсолютный путь к файлу и скрипт пытается открывать файл которого реально нет. Делай echo переменной $strFile.
В ХР права на файл можно посмотреть через контекстное меню на вкладке Безопасность. Если она не отображается, то Сервис - Свойства папки... - вкладка Вид - группа Дополнительные параметры выключить "Использовать простой общий доступ".
Люди!!!!!!!!!! Это что прикол юникса?!!!!!!!!!!!!
Нет, это прикол не совсем правильного понимания логики работы компьютера на уровне ОСи.
На сколько я помню там не было сокрытие вкладки "Безопасность". Эту фичу MS, на сколько я сейчас помню, ввели с ХР.
ЗЫ. Ну я же говорил, что чудес не бывает ;)
ЗЫ. Ну я же говорил, что чудес не бывает ;)
-------
Да именно безопастность. Только в 2000 она была всегда - но я на нее особо не обращал внимания. А в XP - ее "скрыли" введя пункт "использовать простой общий доступ к файлам" - даже и подумать не мог кудаделись права файлов :-)
Сбасибо большое за подсказку!!