Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Определение количестве файлов в папке (http://www.flasher.ru/forum/showthread.php?t=147741)

Toxedo 13.12.2010 07:57

Определение количестве файлов в папке
 
Доброе утро)
А как можно с помощью пхп сразу узнать сколько файлов в определенной папке, их расширение, размер и имя?
И как потом лучше сформировать строку, которую бы принял флеш =)

-De- 13.12.2010 09:30

http://tinyurl.com/23sps4y

Toxedo 14.12.2010 00:58

Нашел. Но не могу найти команду которая бы сформировала массив в пхп...потом его нужно принять флешу
PHP код:

$stack = array();
 

  foreach (
glob("*.txt") as $filename) { 
  
array_push($stack, $filename."split");

   }
    echo 
"Peremenna9=$stack"; // как мне вывести все элементы массива в строчку? По типу stack.children...и передать их флешу 

Помогите пожалуста

mooncar 14.12.2010 01:28

Из конкретного проекта. Скрипт для сканирования и передачи содержания директории. Скрипт принимает get-строкой как параметр имя поддиректории ($dir_name ) в некой директории ($dir_general), сканирует заданную поддиректорию и отдает строку вида file1=1.jpg&file2=2.jpg&file3=some.jpg...&total=99 обратно флешке.
Во флешке под as2 использовался вроде sendAndLoad. А может просто load, не помню.
В любом случае во флеше используется LoadVars и разбор ответной строки шел в обработчике onLoad, где данные парсились и раскладывались в массив.
PHP код:

<?php
    $dir_name 
= $_GET['dir_name'];
    
    
//Директория с фотографиями моделей относительно этого скрипта (нужен для его работы)
    
$dir_general = '../img/'; 
    
    
$dir = $dir_general.$dir_name;
    if (!(
$dp = opendir($dir))) die ('err=Неверная директория с изображениями');
    
    
$str = '';
    
    while (
$file = readdir($dp))
    {
        if (
$file != '.' && $file != '..' && is_file($dir.'/'.$file))
        {
            
$files[] = $file;
        }
    }
    
    
closedir($dp);

    
$total = count($files);

    if (
$total > 0)
    {
        
sort($files);
    }
    
    for (
$i = 0; $i < $total ; $i++)
    {
        
$str .= '&file'.$i.'='.$files[$i];
    }
    
$str .= '&total='.$total;

    
$str = substr($str, 1); //отрезаем лишний &
    
echo $str;
?>

Думаю, что комментарии не нужны?
По такому же принципу можно организовать кроме имен и количества и передачу атрибутов.

Код писал сам, в php бываю слабовато и эпизодически, так что скрипт as is.
Сейчас думаю, что лучше наверное формировать XML, отдавать его флешке и там парсить. Особенно, если надо для каждого файла его атрибуты тоже передавать.

Toxedo 14.12.2010 02:15

Спс за код, но в том то и дело что мне нужна лишь функция в php которая бы представляла массив в виде цифр или слов...тоесть echo тын-дын($myarray) //и выводила бы к примеру только так: Елемент1, Елемент2, Елемент3 и т.д.

Можно и подругому сделать конечно через отдельный php
PHP код:

foreach (glob("*.txt") as $filename) {
 echo 
"$filename+sp";  
   } 



Код AS3:

 
        var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("uploader.php")
loader.load(request);
loader.addEventListener(Event.COMPLETE, onComplete);
 
function onComplete(e:Event) {
  var loader:URLLoader = e.target as URLLoader;
  if(loader != null) {
 
var sk = loader.data.split("+sp");
 
fileRef.addEventListener(Event.COMPLETE, completeHandler); //а эта функция уже для загрузки фоток с именами из массива sk =)
 
  }
}

Но у меня конструкция на отловлю определенных переменных из php. Тоесть как я и писал
PHP код:

echo "Peremennaya1=$stack"; 

а во флеше ловится loader.data.Peremennaya1 и сплитится в массив. Этих переменных в проэкте очень много и создавать каждый раз новый php не целесообразно.

mooncar 14.12.2010 02:25

По голому TCP/IP мы можем передать только строку (текст) или бинарные данные, как мы какой-то массив передадим?
Контекст ведь везде разнородный.

Toxedo 14.12.2010 02:36

Вот именно поэтому я и спрашиваю как массив из пхп переделать в строковую переменную Елемент1, Елемент2, Елемент3 :)

mooncar 14.12.2010 02:49

Я, к сожалению, владею лишь as2, но мне видится, что с сервера можно гнать любую строку вида va1=value1&var2=value2..., а на стороне флешки ее также разбирать по тому же методу (как и foreach в php):

Код AS1/AS2:

var varNames:Array = new Array(); //этот массив будет ассоциативным
lv.onLoad = function(ok:Boolean)
{
        if (ok)
        {
                for (i in this)
                {
                        varNames[i] = this[i];
                }
        }
}

Ну или все-таки смотрите в сторону XML. В PHP есть замечательный класс simpleXML, очень удобный. Собрать данные в XML на сервере, передать его флешке и та его распарсит с помощью (for ... in...)

Division 14.12.2010 09:59

Цитата:

Вот именно поэтому я и спрашиваю как массив из пхп переделать в строковую переменную Елемент1, Елемент2, Елемент3
implode или json_encode

Toxedo 14.12.2010 10:10

Не стал я мучится с этими масивами, просто к строчке в цикле другие приплюсовал с именами файла.


Часовой пояс GMT +4, время: 20:46.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.