Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: roznica miedzy zwracanymi wartosciami TRUE a 1
Forum PHP.pl > Forum > PHP
Octobus
Mam skrypt który rozpakowuje zip'a i muszę sprawdzać czy rozpakowanie się udało. Mam więc
  1. if($rozpakuj = $zip->extractTo(dirname(__FILE__).'/') !== TRUE)
  2. die('nie udalo sie rozpakowac: '.$rozpakuj);


Natrafiłem w końcu na serwer na którym zamiast TRUE zwraca 1 więc łapie się na wykluczenie i wypluwa:
nie udalo sie rozpakowac: 1
jak teraz to sprytnie zrobic? Rozwiazanie pewnie jest banalne ale po tylu h chyba juz nie mysle ;/
Dzieje się tak przy nadpisaniu pliku. Sprawdzałem plik się nadpisuje poprawnie
skowron-line
Rzutowanie typu
Kod
(boolean) $zip->extractTo(dirname(__FILE__).'/')


http://www.php.net/manual/en/language.type...boolean.casting
Octobus
Dzięki kolego ale przedwczesnie sie cieszylem ;/
Kod
if($rozpakuj = (boolean) $zip->extractTo(dirname(__FILE__).'/') !== TRUE)

nadal zwraca
Cytat
nie udalo sie rozpakowac: 1

sad.gif
Crozin
PHP po prostu tak wyświetla zmienną booleanowską w tekście: http://ideone.com/f1gWn
Octobus
Tak, wiem że to może być zarówno 1 jak i TRUE ale dla czego łapie się na ten warunek ?;/
  1. if($rozpakuj = (boolean) $zip->extractTo(dirname(__FILE__).'/') !== TRUE)
  2. die('nie udalo sie rozpakowac: '.$rozpakuj);
Crozin
1. Przypisanie wartości do zmiennej obejmij nawiasem - teraz do $rozpakuj przypisujesz wartość porównania.
2. $a = true; echo 'ala: ' . $a; // "ala 1"
Octobus
Kod
$rozpakuj = (boolean) $zip->extractTo(dirname(__FILE__).'/');
        
    if($rozpakuj !== TRUE)
        die('nie udalo sie rozpakowac: '.$rozpakuj);

daje
Cytat
nie udalo sie rozpakowac:

:/
cudny
  1. swtich(true) {
  2. case($rozpakuj === true):
  3. echo "true<br />";
  4. break;
  5. case($rozpakuj === 1):
  6. echo "jeden<br />";
  7. break;
  8. default:
  9. echo "nie jest ani 1 ani true<br />";
  10. }


napisz co ci to wypisze
nospor
Cytat
swtich(true) {
questionmark.gif

  1. $rozpakuj = $zip->extractTo(dirname(__FILE__).'/');
  2. var_dump($rozpakuj);

var_dump zwraca zawsze to co dostaje. Po grzyba kombinować w jakieś switch i to na dodatek totalnie błędne
cudny
Nie będzie błędne, a chodzi o wyświetlenie mu co dokładnie zwróci funkcja.
Choć wiem, że true a nie 1
nospor
Cytat
$rozpakuj = (boolean) $zip->extractTo(dirname(__FILE__).'/');

if($rozpakuj !== TRUE)
die('nie udalo sie rozpakowac: '.$rozpakuj);

daje
Cytat
nie udalo sie rozpakowac:

:/
No to daje przecież poprawnie... extractTo zwrócił false i wszystko się zgadza. I przestan rzytować na boolean bo extractTo zwraca boolean.

Cudny ja się ciebie pytam po co to:
swtich(true) {
?
cudny
Chciałem koledze wyświetlić co dokładnie zwraca funkcja wink.gif
To nie dla mnie biggrin.gif
nospor
Cudny pytam się po raz kolejny:
switch(true)
Totalny bezsens. Do switch zapodaje się zmiennej a nie TRUE. TO zawsze jest prawdziwe. Robisz switch potem w case walisz warunki. Po co? To co zrobiles robi się IFem a nie switch.

Poza tym to zwraca zmienna to do tego sluzy VAR_DUMP() a nie zadne kombinowanie.


Co do problemu głównego:
na innnym serwerze nie udaje się rozpakować, stad masz takie rzeczy jakie masz.
Cytat
rozpakuj = (boolean) $zip->extractTo(dirname(__FILE__).'/');

if($rozpakuj !== TRUE)
die('nie udalo sie rozpakowac: '.$rozpakuj);

daje
Cytat
nie udalo sie rozpakowac:

To pokazuje wyraźnie, że nie można rozpakować.

Zaś to:
if($rozpakuj = $zip->extractTo(dirname(__FILE__).'/') !== TRUE)
die('nie udalo sie rozpakowac: '.$rozpakuj);
Daje ci w rezultacie 1 bo:
extractTo zwraca false. W efekcie masz taki warunek:
if($rozpakuj = false !== TRUE)
A to kolejnosc wykonywania:
1)false !== TRUE to daje true
2) if($rozpakuj =true)
3) warunek spelnionu, rozpakuj ma true w efekcie widzisz ze sie nie udalo i masz 1. Proste i logiczne
Chcesz miec prawidlowo, to uzyj nawiasow (o czym już dawno wspominał ci Crozin) a na przyszlosc poczytaj o kolejnosci wykonywania zadan
if(($rozpakuj = $zip->extractTo(dirname(__FILE__).'/')) !== TRUE)
die('nie udalo sie rozpakowac: '.$rozpakuj);

Czyli jeszcze raz na koniec:
na drugim serwerze poprostu nie udaje się rozpakować. Tyle w temacie.
cudny
Cytat(nospor @ 6.12.2011, 11:01:26 ) *
Cudny pytam się po raz kolejny bo widze nie kumasz:
switch(true)
Totalny bezsens. Do switch zapodaje się zmiennej a nie TRUE!!! TO zawsze jest prawdziwe. Robisz switch potem w case walisz warunki. Po co? Po co? To co zrobiles robi się IFem a nie switch.


wink.gif zależy kto w jaki sposób korzysta z warunków.
Jeśli chodzi o instrukcje warunkową switch to bardzo ładnie mi porządkuje kod.

W tym wypadku jest to faktycznie do d..y ale zrobiłem to z przyzwyczajenia.
Zobacz jak ładnie można zwalidować dane pobrane z formularza:

  1. switch(true) {
  2. case(!isset($_POST['test'])):
  3. case(!is_array($_POST['test'])):
  4. case(empty($_POST['test'])):
  5. $error = true;
  6. break;
  7. default:
  8. $error = false;
  9. }
nospor
$error = !empty($_POST['test']) && is_array($_POST['test']) ? false : true;
tongue.gif

Cytat
W tym wypadku jest to faktycznie do d..y ale zrobiłem to z przyzwyczajenia.
I o to mi chodziło. zwykły var_dump() i po sprawie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.