• 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.

42 Warsaw Coding Academy
0 głosów
446 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ź 1,054 wizyt
pytanie zadane 11 kwietnia 2021 w Offtop przez Mavimix Dyskutant (8,420 p.)
+1 głos
0 odpowiedzi 375 wizyt
pytanie zadane 17 kwietnia 2018 w Systemy operacyjne, programy przez Zuz Nowicjusz (130 p.)
0 głosów
1 odpowiedź 1,368 wizyt
pytanie zadane 22 lutego 2016 w Systemy operacyjne, programy przez niezalogowany

93,385 zapytań

142,384 odpowiedzi

322,540 komentarzy

62,745 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...