• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Działanie na zawartości RAR poprzez PHP.

Object Storage Arubacloud
0 głosów
178 wizyt
pytanie zadane 22 marca 2016 w PHP przez artimal Gaduła (4,800 p.)

Cześć, nie mogę sobie poradzić z obsługą paczki rar wysłanej w formularzu przez użytkownika za pomocą ajaxa. Po pierwsze skontaktowałem się z hostingiem by zainstalowali na moim serwerze obsługę klasy RarArchive co zrobili. Niestety mimo wzorowania się na przykładach [http://php.net/manual/pl/rararchive.open.php] mój kod nie działa. Na początek załóżmy, że mam tylko jeden cel - policzyć ilość plików w tym archiwum. Zatem:

<?php


	

	$file1_name = $_FILES["file1"]["name"];
	$file2_name = $_FILES["file2"]["name"];

	$file1_type = $_FILES["file1"]["type"];
	$file2_type = $_FILES["file2"]["type"];

	$file1_temp = $_FILES["file1"]["tmp_name"];
	$file2_temp = $_FILES["file2"]["tmp_name"];

	chmod($file1_temp, 0777);
	chmod($file2_temp, 0777);

	move_uploaded_file($file1_temp, "../upload/$file1_name");
	move_uploaded_file($file1_temp, "../upload/$file2_name");

	$ext1 = pathinfo($file1_name, PATHINFO_EXTENSION);
	$ext2 = pathinfo($file2_name, PATHINFO_EXTENSION);
	
	$imie = $_POST['imie'];
	$email = $_POST['email'];
	$mixing = $_POST['mixing'];
	$mastering = $_POST['mastering'];

	function feedback($error){
		if($error==0) echo false;
        if($error==1) echo "Pierwszy plik musi być paczką RAR!";
        if($error==2) echo "Drugi plik musi być formatu WAV lub MP3!";
        if($error==3) echo "Twoja paczka RAR nie mogła zostać odczytana!";
        if($error==4) echo "Twoja paczka RAR jest pusta!";
        if($error==5) echo "Wszystkie wysłane przez ciebie ścieżki powinny być identycznej wielkości!";
        if($error==6) echo $ileplikow;
		if($error==7) echo "W przesłanej przez ciebie paczce rar znajduje się folder zamiast plików WAV!";
        exit();
    }

    if($mixing==1)
    {
		if(!($ext1=="rar")) feedback(1);
		if(!($ext2=="mp3" || $ext2=="wav")) feedback(2);

		$rar = RarArchive::open('../upload/'.$file1_name,NULL);
		if($rar === FALSE) feedback(3);

		$plikirar = $rar->getEntries();
		$ileplikow = count($plikirar);
		feedback(6);
		if($ileplikow==1) feedback(7);

		if(empty($plikirar)) feedback(4);
		$pierwszy = false;
		foreach ($plikirar as $plik)
			{
    			if($pierwszy==false) $pierwszy = $plik->getUnpackedSize();
    			else if(!($pierwszy==$plik->getUnpackedSize())) feedback(5);
    			$shit=$plik->getName();
    			if((pathinfo($plik->getName(), PATHINFO_EXTENSION)=="wav")) feedback(6);
			}
	}

?>


Jak widać umyślnie po stworzeniu zmiennej $ileplikow kończę działanie skryptu by zwrócić tą ilość do js-a. Tam tworzę alert który ma ją wyświetlić lecz niestety wyświetla jedynie pustkę. Kolejne rzeczy które chcę zrobić a które nie działają będziemy rozpatrywać potem - po rozwiązaniu tego podstawowego problemu. Pragnę też dodać, że obecna wersja zawiera funkcję move_uploaded_file(); jedynie z braku laku lecz efekt daje taki sam.
Proszę o pomoc.

1 odpowiedź

+1 głos
odpowiedź 23 marca 2016 przez niezalogowany
edycja 23 marca 2016

Twoja funkcja feedback nie ma zdefiniowanej zmiennej lokalnej $ileplikow, echo $ileplików rzuci błędem. Wyjścia są co najmniej 3..

  1. Użyć w feedback zmiennej globalnej:
    function feedback($error){
    	global $ileplikow;
    
    	if($error==0) echo false;
    	if($error==1) echo "Pierwszy plik musi być paczką RAR!";
    	if($error==2) echo "Drugi plik musi być formatu WAV lub MP3!";
    	if($error==3) echo "Twoja paczka RAR nie mogła zostać odczytana!";
    	if($error==4) echo "Twoja paczka RAR jest pusta!";
    	if($error==5) echo "Wszystkie wysłane przez ciebie ścieżki powinny być identycznej wielkości!";
    	if($error==6) echo $ileplikow;
    	if($error==7) echo "W przesłanej przez ciebie paczce rar znajduje się folder zamiast plików WAV!";
    	exit();
    }
    
  2. Wysyłaj $ileplików jako argument funkcji: (w tym wypadku musiałbyś ją wywoływać dla innych błędów jako feedback(numer_błedu, NULL) )

    function feedback($error, $ileplikow){
    	if($error==0) echo false;
    	if($error==1) echo "Pierwszy plik musi być paczką RAR!";
    	if($error==2) echo "Drugi plik musi być formatu WAV lub MP3!";
    	if($error==3) echo "Twoja paczka RAR nie mogła zostać odczytana!";
    	if($error==4) echo "Twoja paczka RAR jest pusta!";
    	if($error==5) echo "Wszystkie wysłane przez ciebie ścieżki powinny być identycznej wielkości!";
    	if($error==6) echo $ileplikow;
    	if($error==7) echo "W przesłanej przez ciebie paczce rar znajduje się folder zamiast plików WAV!";
    	exit();
    }
  3. Napisz oddzielną funkcję do wyświetlania ilości plików.

Przy czym pierwsze rozwiązanie, nie jest najlepszą praktyką.

komentarz 23 marca 2016 przez artimal Gaduła (4,800 p.)
Wybieram rozwiązanie numer 3 bo to i tak jest tylko dla mnie informacja a w ostatecznym kodzie już jej nie będzie. Przejdźmy do tego, że move_uploaded_file nie działa. Po wykonaniu się skryptu nie mam wysłanych plików w folderze upload. Sprawdzałem nawet czy file_exists i nie wychodzi na to, że tak. O co chodzi?
komentarz 23 marca 2016 przez artimal Gaduła (4,800 p.)
Jeszcze lepiej, plik1 czyli rar się przenosi do folderu a plik2 czyli wav już nie...
komentarz 23 marca 2016 przez efiku Szeryf (75,160 p.)
(Unikaj zmiennych globalnych!!!)

Podobne pytania

+1 głos
1 odpowiedź 478 wizyt
pytanie zadane 11 kwietnia 2021 w Offtop przez Mavimix Dyskutant (8,390 p.)
+1 głos
0 odpowiedzi 257 wizyt
pytanie zadane 17 kwietnia 2018 w Systemy operacyjne, programy przez Zuz Nowicjusz (130 p.)
0 głosów
1 odpowiedź 1,259 wizyt
pytanie zadane 22 lutego 2016 w Systemy operacyjne, programy przez niezalogowany

92,570 zapytań

141,422 odpowiedzi

319,644 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...