Эта тема на forum.dklab.ru


Magenta: Помогите пожалуйста разобраться с warnings
Появляются предупреждения:

Warning: filemtime(): Stat failed for BASE040k.05O.res (errno=2 - No such file or directory) in ...
Warning: filetype(): Lstat failed for (null) (errno=2 - No such file or directory) in ...

вот на этот код:

if(in_array(strrchr($file,'.'),$ext_r )) //íàõîæäåíèå RES ôàéëîâ
{
$t = getdate(filemtime($file));
echo "$file - ".$t['hours']." - ÷àñ ". $t['minutes']." - ìèí<br>";
$mail -> add_attachment($file, $file, filetype($file));
}

помогите разобраться.
Юрий Насретдинов:
Magenta
http://translate.ru
Дмитрий Котеров:
И еще http://ln.com.ua/~openxs/articles/smart-questions-ru.html
Ramzes:
$t = getdate(filemtime($file));
в этой строчке filemtime не может найти тот файл, который был передан переменной $file. Я не знаю откуда эта у вас переменная, но абсолютно точно ошибка идет оттуда. Если не знаете английский, то попробуйте совет yUAC и воспользуйтесь переводчиком - первый варнинг все обьясняет.
Magenta:
Я знаю английский. Может ошибка и из этой строчки $t = getdate(filemtime($file));
НО файл то ТАМ ВСЁТАКИ ЛЕЖИТ!
перед этим куском кода у меня идет вывод листинга директории и все файлы отображаются, но почему-то filemtime() не работает, и вообще выводит не дату модификации файла, а 03.01.1970 !!! я вообще не понимаю почему это происходит, я даже пробовала использовать другие идентичные функции.
Вот более полный код:

$current_dir = "users/";
$result = mysql_query("select * from users where katalog =1");
$num_results = mysql_num_rows($result);
if ($result && ($num_results>0))
{
$mail -> add_html($html, $text);
echo "<br>Кол-во директорий на сервере - $num_results<br>";
echo "Список директорий:";
for ($i = 0; $i < $num_results; $i++)
{
$row = mysql_fetch_array($result);
echo "<br><b>".$row["name"]. "</b>";
$dir = opendir($current_dir . $row["name"]); //работает в каталоге Users
while ($file = readdir($dir))
{
if(!in_array(strrchr($file,'.'),$ext_r ))
{ echo "$file<br>"; }
if(in_array(strrchr($file,'.'),$ext_r )) //нахождение RES файлов
{
$t = getdate(filemtime($file));
echo "$file - ".$t['hours']." - час ". $t['minutes']." - мин<br>";
$mail -> add_attachment($file, $file, filetype($file));
}
}
echo "<br>";
closedir($dir);
$mail -> build_message();
$mail -> send($row["name"], $row["email"], $from_name, $from_address, $subject);
echo "Письмо ".$row["name"]. " отправлено<br>";
}
echo "<br>";
}

Может у Вас побольше опыта и Вы сможете разобраться в чём причина. (обращаюсь к Ramzes)
Maus:
Magenta
попробуйте заменить кусок кода. По идее, должно работать или ругаться по-человечески...
while (false !== ($file = readdir($dir))) // обратите внимание! Это взято из мана
{
if ($file != "." && $file != "..") // обратите внимание! Это взято из мана
{
if(!in_array(strrchr($file,'.'),$ext_r ))
echo "$file<br>";
if(in_array(strrchr($file,'.'),$ext_r )) //нахождение RES файлов
{
if(!file_exists($file)) // на всякий случай
echo "$file не существует!<br>";
else
{
$t = getdate(filemtime($file));
echo "$file - ".$t['hours']." - час ". $t['minutes']." - мин<br>";
$mail -> add_attachment($file, $file, filetype($file));
}
}
}
}

Anonymous:
Maus, код действительно не находит ни одного файла в директориях!
Я тогда вообще не понимаю. Файлы там есть. Меня не глючит.

$ext_r = array('.res', '.RES');
$ext_z = array('.99o.z', '.00o.z', '.01o.z', '.02o.z', '.03o.z', '.04o.z', '.05o.z', '.99O.z', '.00O.z', '.01O.z', '.02O.z', '.03O.z', '.04O.z', '.05O.z', '.gz', '.z', '.tar', '.GZ', '.Z', '.TAR');


$current_dir = "users/";
$result = mysql_query("select * from users where katalog =1");
$num_results = mysql_num_rows($result);
if ($result && ($num_results>0))
{
$mail -> add_html($html, $text);
echo "<br>Кол-во директорий на сервере - $num_results<br>";
echo "Список директорий:";
for ($i = 0; $i < $num_results; $i++)
{
$row = mysql_fetch_array($result);
echo "<br><b>".$row["name"]. "</b><br>";
$dir = opendir($current_dir . $row["name"]); //работает в каталоге Users
while (false !== ($file = readdir($dir)))
{ if ($file != "." && $file != "..")
{
if(in_array(strrchr($file,'.'),$ext_z ))
{
if(!file_exists($file)) // на всякий случай
echo "$file не существует!<br>";
else
echo "$file<br>";
}
if(in_array(strstr($file,'.'),$ext_r )) //нахождение RES файлов
{
if(!file_exists($file)) // на всякий случай
echo "$file не существует!<br>";
else
{
$t = getdate(filemtime($file));
echo "$file - ".$t['hours']." - час ". $t['minutes']." - мин<br>";
$mail -> add_attachment($file, $file, filetype($file));
}
}
}
} //while


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

вот листинг каталога (из IE):
Поддиректория: /users/admin
Листинг:
.
..
result.txt
karb1340.z
readme.txt
BASE040k.05O
karb1340.z.res
BASE040k.05O.res
primer2.z
primer2.z.res

все файлы есть!

а это выводит данный скрипт:

Кол-во директорий на сервере - 2
Список директорий:
guest
BASE040k.05O.res не существует!

Письмо guest отправлено

admin
karb1340.z не существует!
karb1340.z.res не существует!
BASE040k.05O.res не существует!
primer2.z не существует!
primer2.z.res не существует!

Письмо admin отправлено
Maus:
Magenta
Вы правы - я искал там, где светло...
Вот тестовый вариант (в смысле - выкиньте лишнее), который работает (проверено)
в папке /users/admin были созданы файлы с указанными Вами именами

// тестовые данные
$current_dir = "users/";
$row['name'] = 'admin';
$ext_r = array('.res', '.RES');
$ext_z = array('.99o.z', '.00o.z', '.01o.z', '.02o.z', '.03o.z', '.04o.z', '.05o.z', '.99O.z', '.00O.z', '.01O.z', '.02O.z', '.03O.z', '.04O.z', '.05O.z', '.gz', '.z', '.tar', '.GZ', '.Z', '.TAR');
// тестовые данные end
$dir = opendir($current_dir . $row["name"]); //работает в каталоге Users
$old_dir = getcwd(); // нужно ли? не уверен...
echo (chdir($current_dir . $row["name"])) ? "dir changed<br>" : "dir changing error<br>"; // вот где собака порылась! Можно, конечно, и к имени файла слева дописывать каталог, но не так интересно
while (false !== ($file = readdir($dir))) // обратите внимание! Это взято из мана
{
if ($file != "." && $file != "..") // обратите внимание! Это взято из мана
{
if(!in_array(strrchr($file,'.'),$ext_r ))
echo "$file<br>";
if(in_array(strrchr($file,'.'),$ext_r )) //нахождение RES файлов
{
if(!file_exists($file)) // на всякий случай
echo "$file не существует!<br>";
else
{
$t = getdate(filemtime($file)); // без chdir() ругалась сполне справедливо
echo "$file - ".$t['hours']." - час ". $t['minutes']." - мин<br>";
$mail -> add_attachment($file, $file, filetype($file));
}
}
}
}
echo (chdir($old_dir)) ? "dir restored<br>" : "dir restoring error<br>"; // нужно ли? не уверен...

Magenta:
Спасибо, Maus. Всё заработало. Я неправильно передавала путь к файлу.
Вот код:


$ext_r = array('.res', '.RES');
$ext_z = array('.99o.z', '.00o.z', '.01o.z', '.02o.z', '.03o.z', '.04o.z', '.05o.z', '.99O.z', '.00O.z', '.01O.z', '.02O.z', '.03O.z', '.04O.z', '.05O.z', '.gz', '.z', '.tar', '.GZ', '.Z', '.TAR');


$current_dir = "users/";
$result = mysql_query("select * from users where katalog =1");
$num_results = mysql_num_rows($result);
if ($result && ($num_results>0))
{
$mail -> add_html($html, $text);
echo "<br>Кол-во директорий на сервере - $num_results<br>";
echo "Список директорий:";
for ($i = 0; $i < $num_results; $i++)
{
$row = mysql_fetch_array($result);
echo "<br><b>".$row["name"]."</b><br>";
$f = $row["name"]."/";
$dir = opendir($current_dir.$f); //работает в каталоге Users
while (false !== ($file = readdir($dir)))
{
if ($file != "." && $file != "..")
{
$p = $current_dir.$f.$file;
if(in_array(strrchr($file,'.'),$ext_z))
{
if(!file_exists($p)) // на всякий случай
echo "$file не существует!<br>";
else echo "$file<br>";
}
if(in_array(strrchr($file,'.'),$ext_r)) //нахождение RES файлов
{
if(!file_exists($p)) // на всякий случай
echo "$file не существует!<br>";
else
{
$t = getdate(filemtime($p));
echo "$file - ".$t['hours']." - час ". $t['minutes']." - мин<br>";
$mail -> add_attachment($current_dir.$f, $file);
//$mail -> add_attachment($current_dir.$f, $file, filetype($file));
}
}
}
} //while



УРА!
Magenta:
Теперь надо с аттачем разобраться.
Пока не получается, вроде файл прикрепляет к письму, а в файле вместо его содержимого ПУТЬ!
Magenta:
Письмо с нормальным аттачем приходит только когда прикрепляется только один файл. (файлы .res надо отправить по почте)
Когда их несколько, то приходит не пойми что!
_______________
Кол-во директорий на сервере - 2
Список директорий:
guest
BASE040k.05O.res - 18 - час 22 - мин -Здесь нормально

Письмо guest отправлено

admin
karb1340.z
karb1340.z.res - 15 - час 35 - мин - Здесь приходит файл без имени с непонятным текстом (см. ниже)
BASE040k.05O.res - 15 - час 35 - мин
primer2.z
primer2.z.res - 15 - час 35 - мин

Письмо admin отправлено
________________________

непонятный текст:

This is a MIME encoded message.

--=_8d8980e0326e2b2e037d08212585a18e
Content-Type: multipart/alternative;
boundary="=_827050d0a2794494ab121b32dfb62981"


--=_827050d0a2794494ab121b32dfb62981
Content-Type: text/plain
Content-Transfer-Encoding: base64

8OXn8+v88uDy+yDu4fDg4e7y6ug=


--=_827050d0a2794494ab121b32dfb62981
Content-Type: text/html
Content-Transfer-Encoding: base64

8ewuIOLr7ubl7ej/


--=_827050d0a2794494ab121b32dfb62981--

--=_8d8980e0326e2b2e037d08212585a18e
Content-Type: application/octet-stream; name="primer2.z.res"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="primer2.z.res"

cHJpbWVyMi56IC0gaW5jb3JyZWN0IGZpbGVuYW1lDQoNCkZpbGVuYW1lIG11c3QgYmUgOiDs7uPz
IOfk5fH8IO3g7+jx4PL8IO/u5PHq4Ofq8ywg5fHr6CDt4OTuPw==

--=_8d8980e0326e2b2e037d08212585a18e
Content-Type: application/octet-stream; name="BASE040k.05O.res"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="BASE040k.05O.res"

ZmlsZTpCQVNFMDQway4wNU8gZG95PTA0MCB5ZWFyPTIwMDUKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpCQVNF
IEJBU0UgR1BTICAgIE40MyAxMCAyMy43OTg5OCBXMDA1IDUyIDIyLjY5OTQwIDYzNjgzNjcuMTYx
MSAgCgkJCVgJCVkJCVoKCSAgICAgICstICAwLjA1MjU2ICAgICAgICAgKy0gIDAuMDY0MjYgICAg
ICArLSAgMC4wNjU3MCAgIAo=

--=_8d8980e0326e2b2e037d08212585a18e
Content-Type: application/octet-stream; name="karb1340.z.res"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="karb1340.z.res"

a2FyYjEzNDAueiAtIGluY29ycmVjdCBmaWxlbmFtZQ0KDQpGaWxlbmFtZSBtdXN0IGJlIDog7O7j
8yDn5OXx/CDt4O/o8eDy/CDv7uTx6uDn6vMsIOXx6+gg7eDk7j8=

--=_8d8980e0326e2b2e037d08212585a18e
Content-Type: application/octet-stream; name="BASE040k.05O.res"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="BASE040k.05O.res"

ZmlsZTpCQVNFMDQway4wNU8gZG95PTA0MCB5ZWFyPTIwMDUKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpCQVNF
IEJBU0UgR1BTICAgIE40MyAxMCAyMy43OTg5OSBXMDA1IDUyIDIyLjY5OTM0IDYzNjgzNjcuMTYx
MCAgCgkJCVgJCVkJCVoKCSAgICAgICstICAwLjA1MjU3ICAgICAgICAgKy0gIDAuMDY0MjUgICAg
ICArLSAgMC4wNjU2OSAgIAo=

--=_8d8980e0326e2b2e037d08212585a18e--
Maus:
Magenta
Мнээ... А можно поподробнее: что за класс mail? PEARовский?

Эта тема на forum.dklab.ru