이 글은 7가지 고전적인 PHP 인터뷰 질문(답변 포함)을 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
1. 두 배열을 병합하는 방법에는 여러 가지가 있습니다. 유사점과 차이점을 비교해 보세요
방법:
1, array_merge()
2, '+'
3, array_merge_recursive
유사점과 차이점:
array_merge 단순 merge array
array_merge_recursive는 두 배열을 병합합니다. 배열에 정확히 동일한 데이터가 있는 경우 이를 재귀적으로 병합합니다.
array_combine 및 '+': 두 배열을 병합하고 전자의 값이 새 배열의 키 역할을 합니다
2. 사용자가 제출한 데이터가 정수인지 확인하는 함수를 작성해주세요(데이터 유형에 관계없이 2진수, 8진수, 10진수, 16진수일 수 있음)
답변: 실제로 주요 메소드는 is_int 및 Floor
if(!is_numeric($jp_total)||strpos($jp_total,".")!==false){ echo "不是整数"; }else{ echo "是整数"; }
3. PHP의 strtolower() 및 strtoupper() 함수로 인해 중국어가 아닌 시스템이 설치된 서버에서 중국어 문자가 잘못된 문자로 변환될 수 있습니다. 유니코드 텍스트와 호환되는 문자열 대소문자 변환을 달성하려면 두 가지 대체 함수를 작성하십시오. 답변: 이유 예: 중국어는 멀티바이트로 구성되어 있는데, 영어 체계에서는 영어 한 글자만 1바이트밖에 안 되기 때문에 시스템은 중국어의 각 바이트에 대해 strtolower() 처리를 하고, 변경된 한자를 이어붙여 합쳐지게 된다. 잘못된 문자(새로 생성된 인코딩 맵에 해당하는 문자는 중국어가 아닐 수 있음)
수동 해결 방법: str_split(string string, intstring, intsplit_length = 1)을 사용하여 중국어를 3바이트로 자르는 것처럼 각 바이트별로 자릅니다. 인식된 바이트가 영문자인 경우 변환됩니다.
<?php function mystrtoupper($a){ $b = str_split($a, 1); $r = ''; foreach($b as $v){ $v = ord($v); if($v >= 97 && $v<= 122){ $v -= 32; } $r .= chr($v); } return $r; } $a = 'a中你继续F@#$%^&*(BMDJFDoalsdkfjasl'; echo 'origin string:'.$a." "; echo 'result string:'; $r = mystrtoupper($a); var_dump($r);
PHP의 is_writeable() 함수에는 디렉터리/파일이 쓰기 가능한지 여부를 정확하게 확인할 수 없는 버그가 있습니다. 디렉터리/파일이 완전히 쓰기 가능한지 확인하는 함수를 작성하세요. 답변: 버그는 두 가지 측면에서 존재합니다.
1. windowsns에서 is_writeable() 함수는 파일에 읽기 전용 속성만 있는 경우에만 false를 반환합니다. true가 반환되면 파일에 반드시 쓰기가 가능한 것은 아닙니다.
디렉토리인 경우 해당 디렉토리에 새 파일을 생성하고 파일을 열어 확인합니다.
파일인 경우 파일을 열어(fopen) 파일에 쓰기 가능한지 테스트할 수 있습니다.
2. Unix에서는 PHP 구성 파일에서 safe_mode가 켜져 있으면(safe_mode=on) is_writeable()도 사용할 수 없습니다.
safe_mode가 활성화되어 있는지 확인하려면 구성 파일을 읽어보세요.
/** * Tests for file writability * * is_writable() returns TRUE on Windows servers when you really can't write to * the file, based on the read-only attribute. is_writable() is also unreliable * on Unix servers if safe_mode is on. * * @access private * @return void */ if ( ! function_exists('is_really_writable')) { function is_really_writable($file){ // If we're on a Unix server with safe_mode off we call is_writable if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE){ return is_writable($file); } // For windows servers and safe_mode "on" installations we'll actually // write a file then read it. Bah... if (is_dir($file)){ $file = rtrim($file, '/').'/'.md5(mt_rand(1,100).mt_rand(1,100)); if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE){ return FALSE; } fclose($fp); @chmod($file, DIR_WRITE_MODE); @unlink($file); return TRUE; } elseif ( ! is_file($file) OR ($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE) { return FALSE; } fclose($fp); return TRUE; } }
PHP의 chmod() 함수에 버그가 있어 설정 성공을 보장할 수 없습니다. 지정된 경로에 디렉터리/파일을 생성하고 권한 마스크가 올바르게 설정될 수 있는지 확인하는 함수를 작성하세요.답변: 저도 답을 못찾겠어요
6 .PHP는 업로드된 파일 정보 배열에서 $_FILES['type'] 파일 형식을 처리합니다. 클라이언트 브라우저에서 제공하는 정보일 수 있습니다. 해커가 업로드한 이미지 파일 형식을 확인하는 기능을 작성하세요. 사용자는 확실하고 신뢰할 수 있습니다. 답변: 업로드된 이미지 유형을 확인하기 위해 getimagesize를 사용하는 것이 $_FILES 함수 유형보다 더 안정적입니다.
동일한 파일에 대해 브라우저에 따라 PHP에서 반환하는 유형이 다릅니다.
해커가 위장된 이미지 접미사가 포함된 실행 파일을 서버에 제출하는 데 사용될 수 있습니다.
getimagesize() 함수를 사용하면 업로드된 파일 형식을 확인할 수 있습니다. 아바타 파일인 경우 이와 같은 배열이 반환됩니다.
Array( [0] => 331 [1] => 234 [2] => 3 [3] => width="331" height="234" [bits] => 8 [mime] => image/png );
getimagesize() 함수가 이와 같은 배열을 반환하면 업로드된 파일은 아바타 파일입니다. 인덱스 2의 표현 유형은
1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF(인텔 바이트 순서), 8 = TIFF(모토로라 바이트 순서)입니다. , 9 = JPC, 10 = JP2, 11 = JPX, 12 =JB2, 13 = SWC, 14 = IFF, 15 = WBMP, 16 = XBM,
이를 사용하여 업로드되는 아바타 유형을 제한할 수 있습니다
<?php $file=$_FILES['file']; if(!empty($file)) { var_dump($file); var_dump(getimagesize($file["tmp_name"])); } ?>
PHP는 데이터의 URL을 인코딩하여 Javascript와의 데이터 상호 작용을 구현합니다. 그러나 일부 특수 문자의 인코딩 및 디코딩 규칙은 Javascript의 규칙과 다릅니다. 이 차이점을 자세히 설명하고 UTF-8 문자 집합으로 데이터를 작성해 주세요. PHP의 인코딩 및 디코딩 기능과 Javascript의 인코딩 및 디코딩 기능을 실행하여 PHP로 인코딩된 데이터가 Javascript로 올바르게 디코딩될 수 있고 Javascript로 인코딩된 데이터가 PHP로 올바르게 디코딩될 수 있는지 확인하세요. 답변:
<?php $str = '思源博客siyuantlw/tlw/sy/俺只是一个打酱油的'; $str = iconv("GB2312",'UTF-8',$str); $str = urlencode($str); ?>
//js decodeURIComponent가 보이지 않습니다. GB2312 인코딩 형식을 지원하려면 utf-8로 변환해야 하며, 문자열에 공백이 있으면 + 기호
<html> <script> var ds = '<?php echo $str;?>'; var dddd= decodeURIComponent (ds); alert(dddd); </script> </html>
위 내용은 7가지 고전적인 PHP 인터뷰 질문(답변 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!