PHPExcel 관련 에러 : fatal error ‘break’ not in the ‘loop’ or ‘switch’ context in phpexcel

php로 엑셀을 만드는걸 지원해주는 PHPExcel 이란게 있는데, 이게 엑셀파일을 열어보니 에러만 틱 뱉고 자료가 없는게 아닌가?!

Fatal error : ‘break’ not in the ‘loop’ or ‘switch’ context in Classes/PHPExcel/Calculation/Functions.php on line 581

여길 가보니, return 아래에 break 가 있었다. (왜 break가 있는거지…?)

그래서 break를 주석처리하고 저장하니 해결됫다. (음?)

//break;

당연히 스택오버플로우에서 발견했다.

그리고 1.8.0 버전의 PHPExcel 에서 발견된 문제이며 1.8.1 버전에서 Fixed 되었다고 하니 깃에서 새로 다운받아서 바꿔보는것도 괜찮을지도??

Github : https://github.com/PHPOffice/PHPExcel

 

 

Fatal error: ‘break’ not in the ‘loop’ or ‘switch’ context in Function.php

I am trying PHPExcel and I get an error in output when I perform my script:

Fatal error: ‘break’ not in the ‘loop’ or ‘switch’ context in /opt/lampp/htdocs/Xlsphp/test/Classes/PHPExcel/Calculation/Functions.php on line 581

I don’t know what I am doing wrong in my PHP script. It seems that everything is correct.

Does anybody have any idea how to solve it?

Here’s my PHP script:

<?php
require_once 'Classes/PHPExcel.php';
require_once 'config.php';

$sql = 'SELECT * FROM tablevalues';
$result = mysqli_query($conn, $sql) or die(mysqli_error($conn));
$fileName = 'test.xls';

// initialise excel column name
// currently limited to queries with less than 27 columns
$columnArray = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");

// Instantiate a new PHPExcel object
$objPHPExcel = new PHPExcel();
// Set the active Excel worksheet to sheet 0
$objPHPExcel->setActiveSheetIndex(0);
// Initialise the Excel row number
$rowCount = 1;
// fetch result set column information
$finfo = mysqli_fetch_fields($result);
// initialise columnlenght counter
$columnlenght = 0;
foreach ($finfo as $val) {
    // set column header values
    $objPHPExcel->getActiveSheet()->SetCellValue($columnArray[$columnlenght++] . $rowCount, $val->name);
}
// make the column headers bold
$objPHPExcel->getActiveSheet()->getStyle($columnArray[0]."1:".$columnArray[$columnlenght]."1")->getFont()->setBold(true);

$rowCount++;
// Iterate through each result from the SQL query in turn
// We fetch each database result row into $row in turn

while ($row = mysqli_fetch_array($result, MYSQLI_NUM)) {
    for ($i = 0; $i < $columnlenght; $i++) {
        $objPHPExcel->getActiveSheet()->SetCellValue($columnArray[$i] . $rowCount, $row[$i]);
    }
    $rowCount++;
}
// set header information to force download
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="' . $fileName . '"');
// Instantiate a Writer to create an OfficeOpenXML Excel .xlsx file
// Write the Excel file to filename some_excel_file.xlsx in the current directory
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
// Write the Excel file to filename some_excel_file.xlsx in the current directory
$objWriter->save('php://output');

mysqli_close($conn);
?>
What version of PHPExcel?

Hi, I am using PHPExcel version 1.8.0.

It’s a bug that was fixed for version 1.8.1

( 흠 1.8.1에선 버그가 해결된것 같은데 문제가 생긴건 1.8.0이라서 그랬던거군)

Just remove the “break;” statement in functions.php file. As break is after return statement, so it giving fatal error.

Just to clarify – PHP complains not because the break statemant is found after return, but because it is not inside switch or loop block

For me also same problem but now it working

( ok 해결! )

[PHP] ereg() is deprecated (or eregi) 오류 발생시 해결 방법 / php ereg 설치

문자열을 정규화 패턴으로 검색 하는 경우 많이 사용하는 ereg/eregi 함수입니다.

하지만 PHP 5.3 이후 버전에서는 deprecated 라는 에러 레벨이 추가되면서 ereg 함수 사용시 “ereg() is deprecated” 라는 오류를 발생시키게 됩니다. 엄밀하게 따진다면 이는 오류가 아닌 경고성 메세지이며 PHP 6에서는 사라지는 함수이니 주의하라는 의미입니다.

이미 PHP 5.x 버전으로 복잡하게 구현된 경우는 php.ini의 error_reporting에서 deprecated 레벨에 대해 예외처리로 메세지가 출력되지 않게 할 수 있겠지만 향후 유지관리/상위버전 호환성을 위해 ereg/eregi 함수를 사용하지 않는 것을 권장 합니다.

ereg 함수를 대신 해 사용가능한 함수는 preg_match 입니다. 함수 변경을 하면서 패턴 인자도 형태가 약간 달라지게 되는게 그 중 한 예를 보여드리겠습니다.

위 내용을 보시면 아시겠지만 첫번째 인자(정규식 패턴)에 슬래시(/)가 추가됩니다.

※ 참고로 EREG는 PHP 5까지는 기본으로 들어있지만 7부터는 완전히 삭제되었습니다. 기본 구성 함수이기에 별도로 설치하는게 아니고, Core에 포함되어 있습니다.

PHP 이미지 업로드 오류 / PHP 이미지 에러 관련 확인할 사항

PHP 를 사용하는 서버라면, 이미지 업로드와 관련해서 가장 많이 겪는 문제가 파일권한과 GD 라이브러리 관련한 내용일 것이다.

증상 1 : 다른 소스로 이미지 업로드는 되는데 내 소스로는 안됨. 또는 외부 라이브러리로 할때 안됨.

증상 2 : SimpleUpload.php 같은 라이브러리를 사용하는데 에러확인도 안되고 그냥 안됨.

증상 3 : 단순 파일 저장 및 불러오기는 되는데 이미지 관련된 jpeg, jpg, gif 등이 안됨

증상 4 : 이미지 리사이징 하는데 안됨.

– http://php.net/manual/kr/function.imagecreatefromjpeg.php
– http://php.net/manual/kr/function.imagecreatefrompng.php
– http://php.net/manual/kr/function.imagecreatefromgif.php
– http://php.net/manual/kr/function.move-uploaded-file.php

이러한 경우에 가장 먼저 살펴봐야 할것이 PHP의 GD 라이브러리다.

“난 설치한거 같은데?”

한번 더 확인할것!!

yum 또는 apt-get 으로 php 를 설치한 경우 간단히 install php-gd 명령을 통해 쉽게 해결할 수 있다.

만약 컴파일 & 빌드 형식으로 설치했다면 재컴파일 하면서 옵션에 gd 를 넣어줄것.

(대체로 워드프레스를 쓰는 경우는 GD라이브러리 관련 에러가 출력되기에 쉽게 해결 할 수 있지만, 그렇지 않은 중소규모 PHP 서비스들은 그런거 없다. AJAX까지 섞여있으면 더 찾기 힘듬)

 

[PHP] PHP 7 Constructors Deprecated 이슈 / PHP 5 에서 PHP 7 업그레이드 주의점

참고글 : PHP에서 에러 출력하기

 

로컬 세팅만 우선 PHP 7 으로 업데이트 후 이곳 저곳 페이지를 보던 중 다음과 같은 에러가 발생했다.

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; mPDF has a deprecated constructor in 파일있는경로\파일명.php on line 88

찾아보니까 PHP Constructors(클래스 이름과 같은 이름의 메소드를 정의하는 것)을 사용하지 않는 것을 권장하기 때문에 장래적으로 삭제될 전망이라고 한다.

따라서 PHP 7 에서는 Class 내에서 이 형식의 Constructors 밖에 정의되지 않은 경우에 E_DEPRECATED 발생하는데

__construct() 메소드를 구현하면 이 경고는 발생하지 않는다고 한다.

public function __construct(){ /* nothing */ }

예를 들어 다음과 같은 상황이면 Deprecated가 발생한다.

class foo {
    function foo() {
        echo 'I am the constructor';
    }
}

좀 더 쉽게 설명하자면, 모든 class 선언한 영역의 안에 public function __construct(){ /* nothing */ } 를 넣어주어야 해당 오류가 해결된다는 것.

참고사이트 : http://phpdoc.me/manual/kr/migration70.deprecated.php

PHP 에러 메세지 출력하기 

PHP 에러 메세지 출력하기 

기본적으로 php.ini 파일에서 에러 메세지를 출력하도록 세팅할 수 있지만, 초보는 그런거 찾아 들어가서 세팅 바꾸고 하는게 쉽지는 않다.

따라서 가장 간단한 것이 php 소스에 다음과 같은 코드를 붙여주면 된다.

error_reporting(E_ALL);

ini_set(“display_errors”, 1);

<?php

error_reporting(E_ALL);
ini_set(“display_errors”, 1);

$string = “Hello World ! <br/>”
echo $string

?>

에러 메세지가 나온다.

php.ini의 에러메세지 설정 관련 : http://www.php.net/manual/kr/errorfunc.configuration.php