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

Форум PHP

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

 

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

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

тема: Возможен ли такой скрипт? Сортировка файлов.
 
 автор: Linger   (12.12.2010 в 15:54)   письмо автору
 
 

Здравствуйте, помогите разобраться.

в виндоусе ХП есть папка с картинками.
пример:
2002 тест 1.jpg
2005 тест тест 2.jpg
2003 тест 3.jpg
2003 тест 4.jpg
2006 тест 5.jpg

после сортировки виндоуса по имени получаем следующее:

2002 тест 1.jpg
2003 тест 3.jpg
2003 тест 4.jpg
2005 тест тест 2.jpg
2006 тест 5.jpg

Как с помощью скрипта получить сортировку по номеру в имени файла, в нашем случае с 1-5, вывести это на страничку с ссылками на сами картинки.

  Ответить  
 
 автор: neadekvat   (12.12.2010 в 16:35)   письмо автору
 
   для: Linger   (12.12.2010 в 15:54)
 

Занесите именя файлов в массив и отсортируйте его.

  Ответить  
 
 автор: Linger   (12.12.2010 в 16:47)   письмо автору
 
   для: neadekvat   (12.12.2010 в 16:35)
 

подскажите, пожалуйста, как перенести имена файлов в массив.

  Ответить  
 
 автор: sim5   (12.12.2010 в 16:49)   письмо автору
 
   для: Linger   (12.12.2010 в 15:54)
 

Получите массив файлов:
$m = glob("path/*.jpg"); - где path путь к папке (если нужно)
Удалите путь из имен (если получали файлы с путем):
$m = array_map('basename', $m);
Отсортируйте массив пользовательской функцией:
usort ($m, "cmp");
которая будет получать из имени файлов последние цифры с расширением, сравнивая их, и возвращая результат:
function cmp ($a, $b) {
  preg_match("/\d+\.jpg/i",$a,$m);
  $a = $m[0];
  preg_match("/\d+\.jpg/i",$b,$m);
  $b = $m[0];
  if ($a == $b) return 0;
  return ($a < $b) ? -1 : 1;
}

Вывод:
echo implode("<br>", $m);

  Ответить  
 
 автор: Linger   (12.12.2010 в 17:25)   письмо автору
 
   для: sim5   (12.12.2010 в 16:49)
 

спасибо за ответ! но вот беда, скрипт показывает "2002 тест 1.jpg" после выполнения.
в папке "1" лежат 5 картинок JPG такие же как в первом посте.

<?
$m = glob("C:/1/*.jpg");
$m = array_map('basename', $m);
usort ($m, "cmp");
function cmp ($a, $b) {
preg_match("/\d+\.jpg/i",$a,$m);
$a = $m[0];
preg_match("/\d+\.jpg/i",$b,$m);
$b = $m[0];
if ($a == $b) return 0;
return ($a < $b) ? -1 : 1;
}
echo implode("<br>", $m);
?>

  Ответить  
 
 автор: sim5   (12.12.2010 в 17:51)   письмо автору
 
   для: Linger   (12.12.2010 в 17:25)
 

У вас две беды:
1. Забудьте о путях типа: "C:/1/*.jpg" - не будет их никогда на реальном сервере.
2. Расширения файлов как на душу положат, разными колибрами, то верхним, то нижним регистром, потому одно изображение и получаете. Перепишите так:
$m = glob("Тут путь, но не абсолютный, тем более локальный!!!!! ПЕРЕДЕЛАТЬ!!!!/*.{jpg,JPG}", GLOB_BRACE);

  Ответить  
 
 автор: Linger   (12.12.2010 в 18:01)   письмо автору
 
   для: sim5   (12.12.2010 в 17:51)
 

Отлично! все получилось! Действительно у меня все они в JPG.
Можно ли ссылки сразу на эти же файлы сделать ? что бы открывать их в браузере сразу.
Если у Вас не займет много времени.

  Ответить  
 
 автор: sim5   (12.12.2010 в 18:11)   письмо автору
 
   для: Linger   (12.12.2010 в 18:01)
 

Вы сперва путь переделайте!!! Не будет у пользователя файлов, по путям которые вы указываете - "C:\1....". Возможен только удаленный адрес, для чего используйте пути относительные, либо абсолютные возвращаемые средствами РНР. Ваши ресурсы у хостера можете считать виртуальной машиной, на которой совсем не обязательно, что ваши файлы будут на диске С:, они могут лежать на каком нибудь диске "Зю". Кроме этого запрашиваются они не по локальному пути как у вас, а по сетевому адресу "http://труля-ля..../ваша_картинка".
Вот сперва с этим разберитесь, а уж затем занимайтесь ссылками.

  Ответить  
 
 автор: Linger   (12.12.2010 в 21:09)   письмо автору
 
   для: sim5   (12.12.2010 в 18:11)
 

Нет, просто все это надо проделать на локалхосте. На машине с базой картинок.
Причем в идеале этот путь юзер будет сам задавать ввиде: "папка 1", "папка 2" и тд... где все эти папки лежат на "C:/папка 1" и тд.

через простую форму например get
$name=$_GET['name'];
$m = glob("c:/$name/*.{jpg,JPG}", GLOB_BRACE);

Но лучше бы если сделать кнопку "обзор моего компьютера"... только вот как.

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

  Ответить  
 
 автор: sim5   (12.12.2010 в 21:20)   письмо автору
 
   для: Linger   (12.12.2010 в 21:09)
 

Какой юзер? У юзера нет РНР, это серверный язык!
Значит так, доступ к файлам у клиента только посредством кнопки "Обзор", а путь полученного файла, после этого диалога, в целях безопасности на сервер не передается, только имя. Вопрос, много ли желающих найдется вбивать вам пути руками да еще бог знает для чего?

  Ответить  
 
 автор: Linger   (12.12.2010 в 21:25)   письмо автору
 
   для: sim5   (12.12.2010 в 21:20)
 

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

  Ответить  
 
 автор: sim5   (12.12.2010 в 21:31)   письмо автору
 
   для: Linger   (12.12.2010 в 21:25)
 

Вы просто так пользуетесь РНР, или же что-то для него требуется? Наверное же просто так не запускается он, так ведь? А для программирования под локальную машину есть иные языки программирования. Собственно то чего вы хотите (оптимизировать работу - правда бог знает что за оптимизация такая), можно написать на чистом html с использованием JavaScript и VBScript. Получится hta приложение. Вот ему по боку будет и сеть, и все остальное.
Если нет сети, то и никаких $_GET и прочего, и запускать ради этих картинок сервер у себя, да еще разбираться как с ним работать, никакой юзер не будет.

  Ответить  
 
 автор: Linger   (12.12.2010 в 21:34)   письмо автору
 
   для: sim5   (12.12.2010 в 21:31)
 

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

  Ответить  
 
 автор: sim5   (12.12.2010 в 21:42)   письмо автору
 
   для: Linger   (12.12.2010 в 21:34)
 

Куда туда? Если вы о локальной сети говорите, то.... Мне просто неокогда долго говорить сейчас, и интернет навремя отключить надо, но кратко так - забросьте эту идею, и чем дальше тем лучше. Вам еще раз повторить, что не получите вы на сервере путей атвоматом? А заставлять пользователя заниматься всякой фигней, это есть нехоршо.
Запускайте Гугл и ищите следующее "hta-приложение", а так же "FileSystemObject WScript WshShell". Вот на этом используя JavaScript и пишите.

  Ответить  
 
 автор: Linger   (12.12.2010 в 21:44)   письмо автору
 
   для: sim5   (12.12.2010 в 21:42)
 

спасибо. пойду гуглить.

  Ответить  
 
 автор: Trianon   (12.12.2010 в 21:50)   письмо автору
 
   для: sim5   (12.12.2010 в 21:42)
 

Насчет путей, я не был бы столь категоричным.
если убрать encoding из формы, клиентские пути спокойно проявляются (без файла, конечно же).

Хотя в остальном согласен.

  Ответить  
 
 автор: sim5   (12.12.2010 в 21:55)   письмо автору
 
   для: Trianon   (12.12.2010 в 21:50)
 

Вы их можете получить? Не получится, если не будет ресурс в доверенных, хотя, если речь о локальном приложении, то это не проблема, тем более для IE. А писать приложения на РНР для локального использования, ну это издивательство над пользователями.

  Ответить  
 
 автор: Trianon   (12.12.2010 в 22:31)   письмо автору
 
   для: sim5   (12.12.2010 в 21:55)
 

<form method=post><input type=file name=f /><input type=submit /><form>
<?php print_r($_POST); ?>

  Ответить  
 
 автор: sim5   (12.12.2010 в 22:33)   письмо автору
 
   для: Trianon   (12.12.2010 в 22:31)
 

И где тут путь? Это имя файла у клиента, но не путь.

  Ответить  
 
 автор: Linger   (12.12.2010 в 22:33)   письмо автору
 
   для: sim5   (12.12.2010 в 21:55)
 

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

  Ответить  
 
 автор: sim5   (12.12.2010 в 22:36)   письмо автору
 
   для: Linger   (12.12.2010 в 22:33)
 

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

  Ответить  
 
 автор: Trianon   (12.12.2010 в 22:39)   письмо автору
 
   для: sim5   (12.12.2010 в 22:36)
 

Речь шла о localhost-применении. И в этом аспекте пути передаются на раз.

  Ответить  
 
 автор: Linger   (12.12.2010 в 22:45)   письмо автору
 
   для: Trianon   (12.12.2010 в 22:39)
 

Array ( [f] => 2002 тест 1.jpg )

Ваш скрипт на локалхосте выдает только имя.

  Ответить  
 
 автор: Trianon   (12.12.2010 в 22:59)   письмо автору
49 Кб
 
   для: Linger   (12.12.2010 в 22:45)
 

на самом деле дело не в локалхосте, а в браузере.
И таки да, наверное современные браузеры путь и вправду режут. Что вобщем-то правильно.
Тем не менее, см. аттач.

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

PS. то Sim5. Тем паче, при нехватке времени :)

  Ответить  
 
 автор: Linger   (12.12.2010 в 23:12)   письмо автору
 
   для: Trianon   (12.12.2010 в 22:59)
 

хм. в эксплорере путь показал. и это уже хорошо :)

  Ответить  
 
 автор: sim5   (12.12.2010 в 23:14)   письмо автору
 
   для: Trianon   (12.12.2010 в 22:59)
 

Даже демократичный Ослик выдаст путь только в том случае, если запрашиваемый файл будет в том же каталоге, что и html файл. Чтобы пути отображались, нужно добавить сервис в доверенные.

  Ответить  
 
 автор: Trianon   (12.12.2010 в 23:25)   письмо автору
23.3 Кб
 
   для: sim5   (12.12.2010 в 23:14)
 

вот я ей богу ничего специально в осла не писал :)
тем более, для test1.ru ===>

  Ответить  
 
 автор: Linger   (12.12.2010 в 23:45)   письмо автору
 
   для: Trianon   (12.12.2010 в 23:25)
 

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

  Ответить  
 
 автор: Trianon   (13.12.2010 в 00:16)   письмо автору
 
   для: Linger   (12.12.2010 в 23:45)
 

по "прикрутить" я ни разу не спец.
За код должен отвечать один человек.

  Ответить  
 
 автор: Linger   (13.12.2010 в 00:28)   письмо автору
 
   для: Trianon   (13.12.2010 в 00:16)
 

все равно спасибо!

  Ответить  
 
 автор: sim5   (13.12.2010 в 09:03)   письмо автору
 
   для: Trianon   (12.12.2010 в 23:25)
 

Вы попробуйте использовать этот путь в двух случаях: в локальном исполнении и сетевом, а то что показывает, так это мелочь, хотя не все браузеры даже это будут делать.
<script> 
function imgVal(s) { 
  var im = document.getElementById('im'); 
  var ims = new Image(); 
  im.src = ims.src = s; 
  ims.onload = function() { 
    document.getElementById('res').innerHTML = ims.width + "x" + ims.height; 
  } 

</script> 

<img src="" id="im"> 
<div id="res"></div> 
<form action="" enctype="multipart/form-data"> 
<input type="file" name="fl" onchange="imgVal(this.value)"> 
</form>

Выполните этот код, запустив его локальным html-файлом и из под Денвера, результат можете наблюдать.

  Ответить  
 
 автор: Trianon   (13.12.2010 в 09:09)   письмо автору
 
   для: sim5   (13.12.2010 в 09:03)
 

<input type="file" name="fl" onchange="imgVal(this.value)">
Так а и с каких бы гвоздей?
естественно.

  Ответить  
 
 автор: sim5   (13.12.2010 в 09:17)   письмо автору
 
   для: Trianon   (13.12.2010 в 09:09)
 

Что естественно? this.value - это путь к файлу, напишите alert(this.value) и он его покажет, и картинку покажет, и ее размер, но ТОЛЬКО В ЛОКАЛЬНОМ ИСПОЛНЕНИИ, но не все браузеры. В сетевом исполнении никто уже не покажет ничего. А alert(путь), это фигня, для красоты.

  Ответить  
 
 автор: Trianon   (13.12.2010 в 09:24)   письмо автору
 
   для: sim5   (13.12.2010 в 09:17)
 

Sim5, успокойтесь уже...
За серверное применение вообще - кто-нибуть хоть полслова сказал?
Что путь будет доступен везде - кто-нибуть хоть полслова сказал?
Что этот подход рекомендуется к применению - кто-нибуть хоть полслова сказал?

Там вроде как я даже дописал специально "в остальном согласен".

  Ответить  
 
 автор: sim5   (13.12.2010 в 10:01)   письмо автору
 
   для: Trianon   (13.12.2010 в 09:24)
 

Ну здрасте, приехали ) А автор то чего хочет? Чай как сервер установить и им "раздавать", я потому сразу и сказал - бред.

  Ответить  
 
 автор: Linger   (12.12.2010 в 22:40)   письмо автору
 
   для: sim5   (12.12.2010 в 22:36)
 

понял что с "обзором папок" пролетаем, но если задавать путь вручную? пусть это и не благородно к пользователю.

  Ответить  
 
 автор: Linger   (12.12.2010 в 22:52)   письмо автору
 
   для: sim5   (12.12.2010 в 22:36)
 

подойдет ли такой метод:


При запуске, от пользователя, должен быть передан один обязательный параметр – путь к папке которую нужно обработать ( прямой, а не относительный ). Пусть он будет называться «d».
require_once 'console/Getopt.php';
$options = Console_Getopt::getopt($argv,'d:');  


отсюда:
http://forum.xakmod.ru/showthread.php?p=535

  Ответить  
 
 автор: sim5   (12.12.2010 в 23:20)   письмо автору
 
   для: Linger   (12.12.2010 в 22:52)
 

Задавайте свои вопросы не мне, вы меня достали свои непониманием ей богу.
function setFolder()
  On Error Resume Next
  Set objShellApp = CreateObject("Shell.Application")
  Set objFolder = objShellApp.BrowseForFolder(0, "Выберите папку с изображениями", 1)
  fldr = objFolder.Self.Path
  If fldr Then
   //здесь далее средствами VBS и вышеуказанными
   //выводим, либо что угодно хотите делайте с файлами этой папки
   //и методы такие есть, и в том на что я дал ссылку - читайте, изучайте, пробуйте
  End If
End function

  Ответить  
 
 автор: lightning.say   (15.12.2010 в 12:32)   письмо автору
 
   для: sim5   (12.12.2010 в 21:55)
 

->А писать приложения на РНР для локального использования, ну это издивательство над пользователями.

А если локалка на сто компов с выделенным сервером, почему бы не сделать локальный web-сервер с поддержкой php, сделать на нем сайт и пусть юзеры пользуются на здоровье... нормальная идея чем она вам так не нравится?

  Ответить  
 
 автор: Trianon   (15.12.2010 в 12:59)   письмо автору
 
   для: lightning.say   (15.12.2010 в 12:32)
 

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

  Ответить  
 
 автор: lightning.say   (15.12.2010 в 15:27)   письмо автору
 
   для: Trianon   (15.12.2010 в 12:59)
 

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

  Ответить  
 
 автор: sim5   (15.12.2010 в 15:49)   письмо автору
 
   для: lightning.say   (15.12.2010 в 15:27)
 

Вот же настырный товарищ. Вы понимаете суть вопроса заданного автором?

  Ответить  
 
 автор: lightning.say   (15.12.2010 в 16:34)   письмо автору
 
   для: sim5   (15.12.2010 в 15:49)
 

ладно проехали....

  Ответить  
 
 автор: sim5   (15.12.2010 в 14:09)   письмо автору
 
   для: lightning.say   (15.12.2010 в 12:32)
 

Уважаемый, вы вникните в суть вопроса, а нравится, не нравится, это уже вкусовые качества и к вопросу отношения не имеют.

  Ответить  
 
 автор: Trianon   (15.12.2010 в 14:16)   письмо автору
 
   для: sim5   (15.12.2010 в 14:09)
 

товарищ постоянно оправдывает ник.

  Ответить  
 
 автор: sim5   (15.12.2010 в 14:24)   письмо автору
 
   для: Trianon   (15.12.2010 в 14:16)
 

)

  Ответить  
Rambler's Top100
вверх

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