2009-07-26 9 views
0
$dir_handle = @opendir($url) or die("Unable to open $url"); 
    $count = "0"; 
    while ($file = readdir($dir_handle)) { 
     if (!is_dir($url.'/'.$file) && ($file="*.jpg" || $file="*.gif" || $file="*.png") && $file!="picture0.*") { 
     $galleryEventFile[$count] = $file; 
     $count++; 
     } 
    } 
    closedir($dir_handle); 

는 나는이 줄을 함께 할 수있는 뭔가가 생각 :

if (!is_dir($url.'/'.$file) && ($file="*.jpg" || $file="*.gif" || $file="*.png") && $file!="picture0.*") 

하지만 메신저 확인

답변

6

난 당신이 문제를 일으키는 것 두 가지를 볼 수 있습니다 할당이 아니라 비교가 아니므로 두 개의 등호 (==)를 사용해야합니다. http://php.net/manual/en/language.operators.comparison.php을 참조하십시오. 기본적으로 당신이 if 문에서 과제를 수행하여하고있는 것은 : 문자열

$file = '*.jpg'; 
if ($file) { } 

와일드 카드 매칭은 또한 == "* 그 ($ 파일처럼 일치하는 와일드 카드를 할 수 없습니다. JPG) 문자열에, 당신은는 preg_match() 대신 정규 표현식, 예를 사용하여 볼 수 있었다

if (!preg_match('/\.jpg$/i', $file)) { 
    //not .jpg 
} 

하지만이 같은 것을 할 더 좋을 수 있습니다

//get file extension 
$extension = pathinfo($file, PATHINFO_EXTENSION); 

$allowedExtensions = array('jpg', 'png', 'gif'); 

//check in allowed list 
if (!in_array(strtolower($extension), $allowedExtensions)) { 
    //not valid 
} 
+0

왜 $ extension이 아닌 $ pathinfo입니까? 내가 바보이기 때문에 – imHavoc

+0

. 고마워, 고쳤다. –

0

첫째, $ 카운트 숫자해야하지. 해야 할 일 :

둘째, AFAIK, PHP는 이와 같은 와일드 카드 일치를 지원하지 않습니다. 일치 시키려면 "*"을 사용할 수 없습니다. 조건부로 일치 시키려면 정규 표현식을 사용해야합니다.

할당/비교 : 그러나

if ($file="*.jpg" //etc... 

, 하나의 등호가 수행합니다

당신은 코드를

+0

이렇게해서는 안됩니다. 나는'$ count = "0"을 시도했다; $ count ++; echo $ count;'echo'ed 1. – jimyi

+0

왜 1이 0이 아닌가? 의미가 없습니다. – hobodave

+0

사실입니다. 그것은 무엇보다 문체가 많았습니다. 내재적 인 타입 변환은 나를 괴롭힌다. 내가 생각하는 진짜 문제는 "*"와 일치하는 와일드 카드입니다. – thedz

0

thedz와 Tom Haigh가 제안했듯이.

XDebug에 대해 들어 본 적이 있습니까? 이렇게하면 Eclipse를 사용하여 환경을 설정하고 PHP 코드를 단계별로 실행할 수 있습니다. Eclipse와 XDebug를 함께 사용하지 않고 개발하지 않습니다.

0

제일 먼저하고 싶은 것은 if 라인을 디버그하는 것입니다. *.gif을 입력하면 Windows가 수행하는 것과 비슷한 'any'gif 파일을 찾기보다는 실제로 파일 이름이 "*.gif"임을 확인합니다.

내가 제안하는 것은 if의 각 세그먼트를 살펴보고 통과 시키도록하는 것입니다. 그 다음에 함께 시작할 수 있습니다.

관련 문제