[PHP] Dziwny problem.

0

Witam,

mam następujący kod klasy.

class zip {
	
	private $katalog 		= null;
	private $extKatalog		= null;
	private $plk			= null;
	private $zip	 		= null;
	private $nazwaZIP		= null;
	
	public function __construct($katalog, $extKatalog, $nazwaZIP) {
		$this->katalog = $katalog;
		$this->extKatalog = $extKatalog;
		$this->nazwaZIP = $nazwaZIP;
		$this->plk = '';
		$this->zip = new ZipArchive();
	}
	
	public function utworzArchiwum() {
		if(!$this->zip->open($this->nazwaZIP, ZIPARCHIVE::CREATE)) {
			return false;
		}
		
		if(is_dir($this->katalog)) {
			if($otwK = @opendir($this->katalog)) {
				while(($this->plk = @readdir($otwK)) !== false) {
					if($this->plk != '.' && $this->plk != '..') {
								$this->zip->addFile($this->katalog.$this->plk, $this->extKatalog.$this->plk);
						}
					}
				}
				closedir($otK);
			}
		// --
		return true;
	}
	
	public function rozpakujArchiwum($dokad) {
		if ($this->zip->open($this->katalog.$this->nazwaZIP)) {
			$this->zip->extractTo($dokad);
			return true;
		}
		return false;
	}
	
	public function __destruct() {
		$this->zip->close();
		unset($this->katalog);
		unset($this->extKatalog);
		unset($this->plk);
		unset($this->zip);
		unset($this->nazwaZIP);
	}
}

A w pliku robie coś takiego.

	require_once 'zip.klasa.php';
	
	$zip = new zip('../skrypty/', null, 'plik.txt');
	
	$zip->utworzArchiwum();

I dostaje taki błąd:

Fatal error: Call to undefined method ZipArchive::add_file() in sciezka/zip.klasa.php on line 28

Od czego to może być?

JUŻ ROZWIĄZAŁEM

0

PHP to język server-side, nie ma dostępu do komputera klienta.

0
Coldpeer napisał(a)

PHP to język server-side, nie ma dostępu do komputera klienta.

Przecież ja nie chce nic z kompa klienta. To wszystko leży na serwerze.

0

Jak to nie? a D:.......
//edit: o, widze już zmieniłeś na "../skrypty". Czy katalog ten na pewno istnieje (i jest na localhoście)?

//edit2: ech, nie przeczytałem błędu, spojrzałem kątem oka na "add_file()" i że coś ze ścieżką i napisałem :D ... Mówi przecież, że nie może znaleźć metody ZipArchive::add_file().

0
Coldpeer napisał(a)

Jak to nie? a D:.......
//edit: o, widze już zmieniłeś na "../skrypty". Czy katalog ten na pewno istnieje (i jest na localhoście)? Bo wnioskuję, że możesz robić tak:

D:\localhost\skrypt.php
D:\skrypty

A D:\skrypty leżą poza localhostem, serwer nie ma do nich dostępu.

//edit2: ech, nie przeczytałem błędu, spojrzałem kątem oka na "add_file()" i że coś ze ścieżką i napisałem :D ... Mówi przecież, że nie może znaleźć metody ZipArchive::add_file().

Ok. dzięki za pomoc. Ale jest nowy problem.

<?php

	/*
		Klasa sluzaca do archiwizacji i dearchiwizacji.
	*/
	
	class zip {
		
		private $katalog 		= null;		// katalog do archiwizacji i dearchiwizacji
		private $extKatalog		= null;		// katalo-nazwa rozszerzona
		private $plk			= null;		// plik w archiwum
		private $zip	 		= null;		// obiekty typu ZipArchive
		private $nazwaZIP		= null;		// nazwa pliku zip
		
		/*
			Konstruktor ustawiajacy atrybuty klasy.
		*/
		public function __construct($katalog, $extKatalog, $nazwaZIP) {
			$this->katalog = $katalog;
			$this->extKatalog = $extKatalog;
			$this->nazwaZIP = $nazwaZIP;
			$this->plk = '';
			$this->zip = new ZipArchive();
		}
		
		
		/*
			Metoda tworzaca archiwum z katalogu.
		*/
		public function utworzArchiwum() {
			if(!$this->zip->open($this->nazwaZIP, ZIPARCHIVE::CREATE)) {
				return false;
			}
			
			if(is_dir($this->katalog)) {
				$otK = null;
				if($otwK = @opendir($this->katalog)) {
					while(($this->plk = @readdir($otwK)) !== false) {
						if($this->plk != '.' && $this->plk != '..') {
								$this->zip->addFile($this->katalog.$this->plk, $this->extKatalog.$this->plk);
							}
						}
					}
					@closedir($otK);
				}
			// --
			return true;
		}
		
		/*
			Metoda sluzaca do dearchiwizacji danych.
		*/
		public function rozpakujArchiwum($dokad) {
			if ($this->zip->open($this->katalog.$this->nazwaZIP)) {
				$this->zip->extractTo($dokad);
				return true;
			}
			return false;
		}
		
		/*
			Destruktor 
		*/
		public function __destruct() {
			$this->zip->close();
			unset($this->katalog);
			unset($this->extKatalog);
			unset($this->plk);
			unset($this->zip);
			unset($this->nazwaZIP);
		}
	}
?>

Skrypt ten sam, a błędy:

Warning: ZipArchive::addFile() [function.ZipArchive-addFile]: Invalid or unitialized Zip object in zip.klasa.php on line 40

Warning: ZipArchive::addFile() [function.ZipArchive-addFile]: Invalid or unitialized Zip object in zip.klasa.php on line 40

Warning: ZipArchive::addFile() [function.ZipArchive-addFile]: Invalid or unitialized Zip object in zip.klasa.php on line 40

Warning: ZipArchive::close() [function.ZipArchive-close]: Invalid or unitialized Zip object in zip.klasa.php on line 65

ZROBIONE Dzięki za jakże wyczerpujące podpowiedzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1