Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Skrypt PHP :)


  • Zamknięty Temat jest zamknięty
6 odpowiedzi w tym temacie

#1 Portek

    Kończymy zabawę, permanentna emerytura!

  • Przyjaciel

Reputacja: 976
Master

  • Postów:3 007
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Częstochowa
Offline

Napisano 07.08.2009 17:18

Witajcie :)

Potrzebuję małej pomocy przy dość zaawansowanym skrypcie php, chodzi tutaj o wylistowanie plików do tablicy a następnie pojedyncze pakowanie każdego z nich do archiwum nazwa_pliku_pobrana_z_tablicy.bz2

Ogólnie prób wykonałem masę, rozmawiałem z 2 innymi skrypterami php ale efektów brak...

Oto ostatnie co wymodziłem:
<?php
$ftp_host = "host";
$ftp_user = "log";
$ftp_password = "pass";
$dir = "folder";

echo "
Laczenie z $ftp_host...";
$conn = ftp_connect($ftp_host);
$login = ftp_login($conn, $ftp_user, $ftp_password);

$mode = ftp_pasv($conn, TRUE);

if ((!$conn) || (!$login) || (!$mode)) {
  die("Blad, problem z polaczeniem!");
}
echo "
Polaczenie Ok.
";

$file_list = ftp_nlist($conn, "$dir/*.dem");

function bzip2 ($p) {
 $t = file_get_contents($p);
 $sp = bzopen ($p.".bz2", "w");
 bzwrite($sp, $t);
 bzclose ($sp);
 echo 'Spakowano!';
 return true;
}
bzip2("$file_list");
ftp_close($conn);
?> 

Skrypt w wersji "ręcznej" działa bez problemów
<?php
$plik = '0907141847-de_dust.dem';
function bzip2 ($p) {
  $t = file_get_contents($p);
  $sp = bzopen ($p.".bz2", "w");
  bzwrite($sp, $t);
  bzclose ($sp);
  echo 'Spakowano!';
  return true;
}
bzip2("$plik");
?>

Ale przy takiej ilości plików, aktualizowanych co 30min wszystko mija się z celem, bo komu będzie się chciało dodawać ręcznie pliki?

Planuję spory projekcik, ale brakuje mi właśnie funkcji która pakowała by pliki.
  • +
  • -
  • 0

serwer-1.png
IP: ts3.cserwerek.pl


#2 kyku

    Wszechmogący

  • Użytkownik

Reputacja: 166
Profesjonalista

  • Postów:612
  • Lokalizacja:Jasło
Offline

Napisano 07.08.2009 19:04

bardzo prosto mozna to zrobic :)
<?php
$ftp_host = "host";
$ftp_user = "log";
$ftp_password = "pass";
$dir = "folder";

echo "
Laczenie z $ftp_host...";
$conn = ftp_connect($ftp_host);
$login = ftp_login($conn, $ftp_user, $ftp_password);

$mode = ftp_pasv($conn, TRUE);

if ((!$conn) || (!$login) || (!$mode)) {
  die("Blad, problem z polaczeniem!");
}
echo "
Polaczenie Ok.
";

$file_list = ftp_nlist($conn, "$dir/*.dem");

function bzip2 ($p) {
 $t = file_get_contents($p);
 $sp = bzopen ($p.".bz2", "w");
 bzwrite($sp, $t);
 bzclose ($sp);
 echo 'Spakowano!';
 return true;
}

$i=0;
while(!isset($file_list[$i])) {
 bzip2($file_list[$i]);
 $i++;
}

ftp_close($conn);
?> 

Nie testowalem ale dzialac powinno :)

[ Dodano: 07-08-2009, 20:06 ]
jak cos to pokaz errory i/lub zawartosc array'a $file_list (za pomoca print_r($file_list))
  • +
  • -
  • 0

#3 Portek

    Kończymy zabawę, permanentna emerytura!

  • Autor tematu
  • Przyjaciel

Reputacja: 976
Master

  • Postów:3 007
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Częstochowa
Offline

Napisano 07.08.2009 19:15

"Muszcz" doszedłem do tego samego ;) Funkcja się zapętla i tworzony jest pusty plik o nazwie .bz2

Laczenie z localhost...
Polaczenie Ok.
Spakowano!Spakowano!Spakowano!Spakowano[...]
Fatal error: Maximum execution time of 30 seconds exceeded in /home/bbvn45/public_html/dema/pakuj.php on line 24

@Edit
Poza tym przy próbie wypisania plików do tablicy dostaje pusty wynik
Array ( )

Chodź to akurat mój błąd, skopałem coś w kodzie, naprawię i dam edita jak działa Twoja wersja ;)

______________________

@Edit2
Przebudowałem skrypt nie zmieniłem funkcję ftp_nlist na scandir (bo po co korzystać z FTP skoro działamy w obrębie tego samego ftp ;P)

<?php
$dir = ".";

function scanDirectories($dir, $allowext, $allData=array()) {
    $dirContent = scandir($dir);
    foreach($dirContent as $key => $content) {
        $path = $dir.'/'.$content;
        $ext = substr($content, strrpos($content, '.') + 1);
       
        if(in_array($ext, $allowext)) {
            if(is_file($path) && is_readable($path)) {
                $allData[] = $path;
            }elseif(is_dir($path) && is_readable($path)) {
                $allData = scanDirectories($path, $allData);
            }
        }
    }
    return $allData;
}

$allowext = array("dem");
$files = scanDirectories($dir,$allowext);
print_r($files);

function bzip2 ($p) {
 $t = file_get_contents($p);
 $sp = bzopen ($p.".bz2", "w");
 bzwrite($sp, $t);
 bzclose ($sp);
 echo 'Spakowano!';
 return true;
}

$i=0;
while(!isset($files[$i])) {
 bzip2($files[$i]);
 $i++;
} 
?>

I wszystko było by cacy gdyby nie fakt że nadal nie pobiera plików z tablicy...
Array ( [0] => ./cserwerek-0907142003-de_dust2.dem [1] => ./cserwerek-0907142051-de_dust2.dem [2] => ./cserwerek-0907150926-de_inferno.dem )
Brak jakich kolwiek errorów po wyświetleniu tablicy. Tak jakby funkcja została pominięta?
  • +
  • -
  • 0

serwer-1.png
IP: ts3.cserwerek.pl


#4 kyku

    Wszechmogący

  • Użytkownik

Reputacja: 166
Profesjonalista

  • Postów:612
  • Lokalizacja:Jasło
Offline

Napisano 07.08.2009 20:08

nie mam pojecia czy to cos da ale sprobuj
$i=0;

while(!isset($files[$i])) {

 bzip2($files[$i]);

 $i++;

}
dac przed function bzip2 ($p) {
  • +
  • -
  • 0

#5 Portek

    Kończymy zabawę, permanentna emerytura!

  • Autor tematu
  • Przyjaciel

Reputacja: 976
Master

  • Postów:3 007
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Częstochowa
Offline

Napisano 07.08.2009 20:19

Równie dobrze było by gdybym dał to na początku ;P - Brak rezultatu
  • +
  • -
  • 0

serwer-1.png
IP: ts3.cserwerek.pl


#6 Seba

    Wszechobecny

  • Zbanowany

Reputacja: 198
Profesjonalista

  • Postów:424
  • Lokalizacja:Internet
Offline

Napisano 07.08.2009 22:10

Zwiększyć czas wykonywania skryptu, bądź zrobić coś na styl paginacji - tj. teraz chcesz spakować wszystko na raz, a musisz zrobić że spakuje powiedzmy 10 demek oraz odświeży się strona, pakując kolejne 10itd.

#7 Portek

    Kończymy zabawę, permanentna emerytura!

  • Autor tematu
  • Przyjaciel

Reputacja: 976
Master

  • Postów:3 007
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Częstochowa
Offline

Napisano 08.08.2009 19:06

kyku, dostajesz plusika, powiedzmy że Twój sposób był prawie idealny, kilka poprawek w kodzie i działa ;)

Seba, mija się z celem paginacja, dlaczego? Najpierw wyniki z tablicy do bazy (lub pliku), potem do skryptu...

teraz chcesz spakować wszystko na raz, a musisz zrobić że spakuje powiedzmy 10 demek oraz odświeży się strona, pakując kolejne 10itd.

Nie chce pakować wszystkiego na raz, gdyby tak było pakował bym cały folder ;P Nie mogę pakować 10 dem, a potem odświeżyć strony, dlaczego? Bo skrypt pakuje pojedyncze pliki, nie mam możliwości "kolejkowania".

Problem rozwiązany jednak koledzy z php.pl ściągnęli mnie z "obłoków na ziemię", tak bardzo chciałem pominąć dedyka (czy VPS) w operacji udostępniania dem, że zapomniałem o limitach ustawionych w apachu... Co z tego że mam funkcje która pobiera dema, kasuje i pakuje, skoro limit pamięci przyznanej dla skryptów wynosi 33mb (standard?) a pliki *.dem nierzadko mają 100mb+... Temat zostawiam jeszcze chwilowo otwarty, jakby ktoś chciał podywagować ze mną.
  • +
  • -
  • 0

serwer-1.png
IP: ts3.cserwerek.pl





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych