Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск файла по маске 
V
    Опции темы
Gravip
Дата 30.9.2008, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 17.9.2005

Репутация: нет
Всего: нет



Есть переменная - название файла без расширения, известна директория, где этот файл лежит, нужно получить переменную - названиефайла.расширение smile

Тоесть еще раз

Имеем:

primer //название файла
folder // название папки, где лежит файл

Нужно получить переменную = primer.расширение  // расширение мне не известно, файл с таким именем 100% будет только один в папке
PM MAIL   Вверх
bars80080
Дата 30.9.2008, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



а в чём загвоздка?
открыть каталог opendir()
считать строку (имя файла) - readdir()
разделить имя на собственно имя и расширение - explode('.', $f)
сравниваем и выносим вердикт
PM MAIL WWW   Вверх
Sunvas
Дата 30.9.2008, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Используй функцию glob.

Код

$arr=glob('path/to/dir','myfile.*'); #Вернет список всех файлов



--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Валерия
Дата 30.9.2008, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: 3
Всего: 8



bars80080, а если имя файла "myphoto.15.05.2008.jpg" ?)

PM MAIL   Вверх
bars80080
Дата 30.9.2008, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(Валерия @  30.9.2008,  19:28 Найти цитируемый пост)
bars80080, а если имя файла "myphoto.15.05.2008.jpg

тогда тип сидит в $a[count($a) - 1]; остаётся проверить ? $a[count($a) - 1] == $f, чтобы узнать есть ли у него вообще тип
PM MAIL WWW   Вверх
BrainWorker
Дата 30.9.2008, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 9.8.2007
Где: Дубна, Россия

Репутация: 1
Всего: 2



Проще имя файла проверить регуляркой
Код


preg_match('/\.([^.]+)$/', $str, $matches)


расширение будет в $matches[1]
PM MAIL Jabber   Вверх
Gravip
Дата 1.10.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 17.9.2005

Репутация: нет
Всего: нет



Мои знания совсем скупы в php ( , можете написать полный скрипт с пояснениями пожалуйста smile

начиная с опен дир и заканчивая клоуз дир, пожалуйста )
PM MAIL   Вверх
gta4kv
Дата 1.10.2008, 13:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Gravip, не можем. 
смотрите в мануале.
http://ru2.php.net/opendir
PM MAIL   Вверх
BrainWorker
Дата 1.10.2008, 14:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 9.8.2007
Где: Дубна, Россия

Репутация: 1
Всего: 2



Цитата(Gravip @ 1.10.2008,  13:32)
Мои знания совсем скупы в php ( , можете написать полный скрипт с пояснениями пожалуйста smile

начиная с опен дир и заканчивая клоуз дир, пожалуйста )

Код

<?
   if ($handle = opendir('/path/to/dir'))
   {
      while ( ($filename = readdir($handle)) !== false)
      {
         // файлы с именами "." (текущая директория) и ".." (родительская директория) нам не нужны
         if ($filename[0] == ".") continue;   

         $matches = array();
         preg_match('/\.([^.]+)$/', $filename, $matches);
         $ext = $matches[1];

         // прочие действия, зная расшение $ext
         // ...........................................

      }
      closedir($handle);
   }
?>


Это сообщение отредактировал(а) BrainWorker - 1.10.2008, 14:33
PM MAIL Jabber   Вверх
Gravip
Дата 1.10.2008, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 17.9.2005

Репутация: нет
Всего: нет



BrainWorker, 


Я так и не понял, простите

Есть переменная $file //это название файла

Куда мне ее в ваш скрипт прикрутить, что бы по этому названию искало?
PM MAIL   Вверх
gta4kv
Дата 1.10.2008, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Gravip, ну откуда же такое не желание думать самому?
Я дал ссылку на мануал, там все описано. Неужели так лень один раз вникнуть?
PM MAIL   Вверх
BrainWorker
Дата 1.10.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 9.8.2007
Где: Дубна, Россия

Репутация: 1
Всего: 2



То, что я написал - это пробег по всем файлам в директории.
Если вам нужен поиск в определенной директории определенного файла, то тогда вот функция

Код

function getFilename ($file, $folder)
{
   $handle = opendir($folder);
   if ($handle === false) return false;

   while ( ($filename = readdir($handle)) !== false)
      if (substr($filename, 0, strlen($file)) == $file)   // если $filename начинается с имени $file, то возращаем его полное имя - $filename
      {
         closedir($handle);
         return $filename;
      }

   closedir($handle);
   return false;
}


По-моему подробнее некуда. 

P.S. А вообще надо самостоятельно изучать документацию, иначе язык не выучишь.

Это сообщение отредактировал(а) BrainWorker - 1.10.2008, 16:01
PM MAIL Jabber   Вверх
Валерия
Дата 1.10.2008, 16:12 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: 3
Всего: 8



Мне кажиться сейчас будет вопрос "а что с этой функцией делать? как сделать что бы работало? " smile
PM MAIL   Вверх
Gravip
Дата 1.10.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 17.9.2005

Репутация: нет
Всего: нет



gta4kv, 
BrainWorker, Изучение php не моя цель ) Увы 


BrainWorker, Спасибо большое за помощь, почти что работает ) Пред. решение выдавало в $ext расширение последнего файла в папке ) И победа была близка )

А вот со вторым вообще не понимаю

Код

   function getFilename ($d)
{
   $handle = opendir('./file');
   if ($handle == false) return false;
   while ( ($filename = readdir($handle)) !== false)
      if (substr($filename, 0, strlen($d)) == $d)   // если $filename начинается с имени $d, то возращаем его полное имя - $filename
      {
         closedir($handle);
         return $filename;
      }
   closedir($handle);
   return false;
}   


Я так понял в результате $filename и будет название моего файла? Но он пустой всегда (
PM MAIL   Вверх
BrainWorker
Дата 1.10.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 9.8.2007
Где: Дубна, Россия

Репутация: 1
Всего: 2



Вы переделали мою функцию и написали
Код

$handle = opendir('./file');

но параметром opendir является имя директории, т.е. по вашим запросам - это $folder, а не file

Не понимаю, что непонятного. Всё очевидно!

Это сообщение отредактировал(а) BrainWorker - 1.10.2008, 16:34
PM MAIL Jabber   Вверх
Gravip
Дата 1.10.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 17.9.2005

Репутация: нет
Всего: нет



BrainWorker, Это имя директории, переменной folder нету ) 
PM MAIL   Вверх
BrainWorker
Дата 1.10.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 9.8.2007
Где: Дубна, Россия

Репутация: 1
Всего: 2



Цитата(Gravip @ 1.10.2008,  16:22)
Я так понял в результате $filename и будет название моего файла? Но он пустой всегда (

Да, $filename - имя файла. 

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

Это сообщение отредактировал(а) BrainWorker - 1.10.2008, 16:38
PM MAIL Jabber   Вверх
Gravip
Дата 1.10.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 17.9.2005

Репутация: нет
Всего: нет



фиг его знает ( не работает и все тут ( эх
PM MAIL   Вверх
Валерия
Дата 1.10.2008, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: 3
Всего: 8



Сохрани в архив скрипт вместе с директорией с файлами по которой ищешь

PM MAIL   Вверх
Gravip
Дата 1.10.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 17.9.2005

Репутация: нет
Всего: нет



Так , стоп, а вот такой вопрос $filename - это имя файла с расширением или без? Мне то нужно полюбому как-то расширение найти (

Добавлено через 14 минут и 15 секунд
Валерия, прикрепляю скрипт, что куда класть думаю понять легко smile

Код

<?php
$namE = $_GET['namE'];
$soft = $_GET['soft'];
$eMail = $_GET['eMail'];
$d = $_GET['d'];

if ($namE == '' or $eMail == '' or $d == '')
{
echo <<<END
<html><body>
Заполните, пожалуйста, форму (<font color="red">*&nbsp;</font>Обязательные поля):<br>
<script language="javascript" type="text/javascript"><!--
function checK(f) {
if (f.namE.value=='') {alert('Как вас зовут?');f.namE.focus();return false}
if (f.eMail.value=='') {alert('Введите ваш адрес электронной почты');f.eMail.focus();return false}
if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(f.eMail.value)){
return true
}
alert('Вы ввели не корректно название почты!\nИсправьте пожалуйста');f.eMail.select()
return false
}
 //--></script>
<form action="" name=f onSubmit="return checK(this)" method="get">
<input name="d" value="$d" type="hidden" />
Ваше имя:<br><input type="text" size="30" name="namE" value=""><font color="red">&nbsp;*</font><br>
Ваш адрес электронной почты:<br><input type="text" size="30" name="eMail"><font color="red">&nbsp;*</font><br>
Какой продукт вы используете сейчас?<br><input type="text" size="30" name="soft" value=""><br>
<input type="submit" value="Начать закачку"></form> 
</body></html>
END;
}
else {

   if ($handle = opendir('./down'))
   {
      while ( ($filename = readdir($handle)) !== false)
      {
         // файлы с именами "." (текущая директория) и ".." (родительская директория) нам не нужны
         if ($filename[0] == ".") continue;   
         $matches = array();
         preg_match('/\.([^.]+)$/', $filename, $matches);
         $ext = $matches[1];
         // прочие действия, зная расшение $ext
         // ...........................................
      }
      closedir($handle);
   }
/*
   function getFilename ($d)
    {
   $handle = opendir('./down');
   if ($handle === false) return false;
   while ( ($filename = readdir($handle)) !== false)
      if (substr($filename, 0, strlen($d)) == $d)   // если $filename начинается с имени $d, то возращаем его полное имя - $filename
      { 
      
         closedir($handle);
         return $filename;
      }
   closedir($handle);
   return false;
    }   
   */

$f=fopen("./baza/data.txt","a+");
flock($f,LOCK_EX); // Говорим, что дальше будем работать только мы
fwrite($f, "$namE|$eMail|$soft|$d.$ext\n");// Записываем новое значение
fflush($f); // Сбрасываем файловый буфер
flock($f,LOCK_UN); // Отключаемся от блокировки
fclose($f); // Закрываем файл 

header("Location: /down/$d.$ext");
}
?>

PM MAIL   Вверх
BrainWorker
Дата 1.10.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 9.8.2007
Где: Дубна, Россия

Репутация: 1
Всего: 2



Цитата(Gravip @ 1.10.2008,  17:05)
Так , стоп, а вот такой вопрос $filename - это имя файла с расширением или без? Мне то нужно полюбому как-то расширение найти (

ДА!

А чё ты закомментировал второй вариант. Первый же настроен на выявление расширений всех файлов в директории, а не полного имени файла?

Это сообщение отредактировал(а) BrainWorker - 1.10.2008, 17:50
PM MAIL Jabber   Вверх
bars80080
Дата 1.10.2008, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Фельдмаршала на них не хватает
PM MAIL WWW   Вверх
Gravip
Дата 6.10.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 17.9.2005

Репутация: нет
Всего: нет



BrainWorker, потому что он не работает (
PM MAIL   Вверх
Gravip
Дата 6.10.2008, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 17.9.2005

Репутация: нет
Всего: нет



Ну так никто с рабочим вариантом не поможет? (
PM MAIL   Вверх
BrainWorker
Дата 6.10.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 9.8.2007
Где: Дубна, Россия

Репутация: 1
Всего: 2



Скрипт, который я написал ранее, прекрасно работает. Сам проверял на своей машине. 
Так что проблема не в нем
Код

function getFilename ($file, $folder)
{
   $handle = opendir($folder);
   if ($handle === false) return false;

   while ( ($filename = readdir($handle)) !== false)
      if (substr($filename, 0, strlen($file)) == $file)   // если $filename начинается с имени $file, то возращаем его полное имя - $filename
      {
         closedir($handle);
         return $filename;
      }

   closedir($handle);
   return false;
}

PM MAIL Jabber   Вверх
Gravip
Дата 7.10.2008, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 17.9.2005

Репутация: нет
Всего: нет



BrainWorker, спасибо огромное , все работает smile Стоило лишь почитать про функцию )

Это сообщение отредактировал(а) Gravip - 7.10.2008, 09:56
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0876 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.