@안개로부터 님 구매하신 플러그인은 잘 동작하는지요? > 자유게시판

자유게시판

@안개로부터 님 구매하신 플러그인은 잘 동작하는지요? 정보

@안개로부터 님 구매하신 플러그인은 잘 동작하는지요?

본문

님 쪽지를 보내드리고 싶었으나 정보공개가 되어 있지 않아

자게를 통해 연락을 드립니다

답변은 드렸는데 피드백이 없으셔서...


Parse error: syntax error, unexpected '[', expecting ')'

해당 오류는 사용하시는 PHP 버전이 5.2.17p1 라서

배열에 사용된 '[ ]' 가 동작이 되지 않아서 발생한 겁니다.

PHP 5.4 부터 지원이 된다고 하더군요

 

소스의 일부분이 그누보드 5.4.1 에서 빌려온 것이라

호환 버전에 5.4 를 체크해 놓았는데

5.4.0 이 5.2.17 을 지원은 하지만

오류를 일으킨 소스가 포함되어 있지 않더군요

또 있다고 해도 극히 일부기능에만 쓰여서 해당 오류가 발생할 확률이 극히 희박하더군요.

 

그래서 수정 소스를 답변에 올려 드렸는제 피드백이 없으셔서 걱정이 됩니다

수정된 소스는 아래와 같습니다

다운 받으신 파일 전부 동일한 소스라서 전부 열어서

170 ~ 273 라인까지 수정 후 테스트 부탁드립니다

동일한 버전의 환경을 구성해서 테스트 해 보려 했으나 실패했습니다

테스트 해 보시고 피드백 주시면 감사하겠습니다


            $columns = array_merge($columns, array($field->name));
        }
    } else {
        $i = 0;
        $cnt = mysql_num_fields($result);
        while($i < $cnt) {
            $field = mysql_fetch_field($result, $i);
            $columns = array_merge($columns, array($field->name));
            $i++;
        }
    }
    return $columns;
}
// 백업 쿼리를 만들어 돌려준다.
function get_sqls($tables){
    
    // 쿼리 정보
    $sql  =    '-- # OneShot Database Backup' . PHP_EOL;
    $sql .= '-- # Export created : ' . date('Y-m-d a h:i:s') . PHP_EOL;
    $sql .= '-- # Database : ' . G5_MYSQL_DB . PHP_EOL;
    $sql .= PHP_EOL . 'SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";';
    $sql .= PHP_EOL . 'SET AUTOCOMMIT = 0;';
    $sql .= PHP_EOL . 'START TRANSACTION;';
    $sql .= PHP_EOL . 'SET time_zone = "+00:00";' . PHP_EOL;
    // 테이블 쿼리 생성
    foreach($tables as $table){
        
        $sql .= PHP_EOL  .  '-- # Tabel structure for table `' . $table . '`'. PHP_EOL;
        $sql .=                'DROP TABLE  IF EXISTS `'.$table.'`;'. PHP_EOL;
        // 테이블 스키마
        $result = sql_query('SHOW CREATE TABLE ' . $table);
        $shema = sql_fetch_array($result);
        $sql .= $shema['Create Table'] . ';' . PHP_EOL;
        $shema = '';  // 메모리 초기화
        // 테이블 데이터
        $result = sql_query('SELECT * FROM ' . $table);
        if(sql_num_rows($result)) {
            // 테이블 필드명
            $fields = sql_field_names($table);
            $sql .= PHP_EOL . 'INSERT INTO `'.$table .'` (`'. implode('`, `', $fields) .'`) VALUES ';
            $data_rows= array();
            while($row = sql_fetch_array($result)){
                $data_cols = array();
                foreach( $row AS $k => $v) $data_cols = array_merge($data_cols, array(is_numeric($v) ? $v :"'". str_ireplace(["\n", "\r"], '\n', addcslashes($v, "'\\")) ."'"));
                $data_rows = array_merge($data_rows, array('('. implode(', ', $data_cols) .')'));
                $data_cols = '';
            }
            $sql .= implode(', ' . PHP_EOL, $data_rows) .';'. PHP_EOL;
            $data_rows = '';
        }
    }
    $sql .= PHP_EOL . 'SET FOREIGN_KEY_CHECKS = 1; ';
    $sql .= PHP_EOL . 'COMMIT; ';
    $sql .= PHP_EOL . 'SET AUTOCOMMIT = 1; ' . PHP_EOL;
    return $sql;
}

// 설정경로
$set_path = $g5_path['path'];
$sql = "SHOW VARIABLES LIKE 'basedir'";
$result = sql_query($sql);
$base_dir = sql_fetch_array($result);
$db_path = $base_dir['Value'];
$set_include = $set_exclude = '';
if(is_array($tar_exclude) && count($tar_exclude)) foreach($tar_exclude as $value) $set_exclude .= ' --exclude=' . $value;
$directory = dir($set_path);
while($entry = $directory->read()) if($entry != "." && $entry != ".." && is_array($tar_exclude) && !in_array($entry, $tar_exclude)) $set_include .= ' ' . $entry;
$set_ignore = '';
if(is_array($sql_exclude) && count($sql_exclude)) foreach($sql_exclude as $value) $set_ignore .= ' --ignore-table=' . G5_MYSQL_DB . '.' . $value;
if($mode == 'fb' || $mode == 'ab'){
    // 파일백업
    @exec("tar -czvpf " . $tar_file . $set_include . $set_exclude);
}
if($mode == 'fr' || $mode == 'ar'){
    // 파일복원
    if(file_exists($set_path . '/' . $tar_file)) @exec("tar -xzvpf " . $tar_file);
    else echo "TAR File not found!!!<br>";
}
if($mode == 'db' || $mode == 'ab'){
    // DB백업
    @exec($db_path . '/bin/' . 'mysqldump  -u' . G5_MYSQL_USER . ' -p' . G5_MYSQL_PASSWORD . '  ' . G5_MYSQL_DB . $set_ignore . '  > osDB.sql', $output, $retval);
    if($retval){
        $tables = array();
        $sql = 'SHOW TABLES';
        $result = sql_query($sql);
        while ($row = sql_fetch_array($result)) if(!in_array($row['Tables_in_'.G5_MYSQL_DB], $sql_exclude)) $tables = array_merge($tables, array($row['Tables_in_'.G5_MYSQL_DB]));

'[ ]' 의 경우 array() 로 대체가 가능하지만

해당 소스가 루프 소스 안에 있기 때문에

array_merge 로 해당 소스를 대체 했습니다

혹 만약 오류가 있다면 댓글 주시면 다시 해결해 드리겠습니다

만약 안되면 환불도 가능하니 연락 기다리겠습니다

추천
0

댓글 8개

안녕하세요. 친절하게 신경써주셔서 감사합니다.

우선 알려주신 방법으로 돌려봤는데... 역시 실패했습니다. ㅠㅠ

Parse error: syntax error, unexpected '[', expecting ')' in /home/hosting_users/db명/www/_fbackup.php on line 213

Parse error: syntax error, unexpected '[', expecting ')' in /home/hosting_users/db명/www/_dbackup.php on line 213

아무래도 오래된 버전이 문제겠죠??

전에도 말씀드렸듯이
PHP : PHP 5.2.17p1 / DataBase : MySQL 5.1.45p1-log
그리고 그누보드는 - 아미나빌더 1.8.51 / 그누보드 5.3.3.3(패치 G5.4.21) 입니다.


그래서 수정 전 원본으로 제가 옮기려했던 호스팅환경(같은 그누보드 버전에 UTF-8 (PHP7.3, mariadb-10.0.x)에서 테스트해보니 잘 작동하더라고요.

기능은 너무 좋은데... 제가 잘못했던걸 수도 있겠지만... db정보 등도 여러 번 확인하고
수정하라고 주신 소스도 잘 붙였는지 잘 확인하긴 했습니다.

환불은 뭐 얼마 안되는 돈이니까.. 괜찮습니다. 또 옮겨가는 호스팅에서 사용할 수도 있으니까..

혹시, 나중이라도 방법이 계시면 알려주세요.
쪽지는 정보공개하려고 했는데... 휴면계정으로 지정되어 있다고 하네요. 이메일은 *** 개인정보보호를 위한 이메일주소 노출방지 ***입니다.

------------
질문이 하나 있는데
혹시 다른 방법으로 백업 받은 것을 파일명만 맞춰주면 복원이 되는지요?
osDB.sql 또는 osFB.tar 로


여튼 감사합니다. 혹시 다시 돌려보다가 되면 회신드리겠습니다.
수정이 잘 되었다면 오류가 난 213번째 줄의 소스는

		if(sql_num_rows($result)) {

이 소스일겁니다.

구문오류인데 소스에서 보시는 것처럼 '[' 이 없는데 오류를 보여주고 있습니다
일단 213번째 줄이 위 소스가 맞는지 확인 부탁드립니다

사용 하신 아미나도 다운 받아 소스를 확인해 보니
수정하기 전 그러니까 플러그인 원본 소스와 같은 소스가 들어가 있습니다

해당 소스로 크게 문제가 없으셨다면
php 버전 문제라고 단정 짓기도 어렵고 플러그인의 문제라고 보기도 어렵습니다

마지막으로 질문하신 내용은
가능할거 같습니다

단, 단순히 아무파일이나 변경하시는게 아니라
앞에 이름만 다른 동일 형식의 파일이어야 합니다.


$tar_file = 'osFB.tar.gz';
$sql_file = 'osDB.sql';


6~7번째 줄에 파일 이름을 지정하는 곳을 변경 하셔도 되고
파일 이름을 소스에 맞게 변경하셔도 됩니다

한번에 딱 되면 정말 좋은데
불편을 드려 죄송할 따름입니다

일단 어떻게든 동일 환경을 구성해서 테스트를 진행해 봐야겠습니다
찜찜한 건 해결을 하고 넘어가는 성격이라서요
저 또한 결과를 다시 회신 드리겠습니다
@as12as 설마 이건 아니겠지만서도
원본 소스 그대로 사용하시고 (DB 정보는 변경 하시구요)
처음 오류가 났었던 222번째 줄을

foreach( $row AS $k => $v) $data_cols[] = is_numeric($v) ? $v :"'". str_ireplace(["\n", "\r"], '\n', addcslashes($v, "'\\")) ."'";



				foreach( $row AS $k => $v){
					if(is_numeric($v)){
						$data_cols[] = $v;
					} else {
						$data_cols[] = "'". str_ireplace(["\n", "\r"], '\n', addcslashes($v, "'\\")) ."'";
					}					
				}

로 수정해서 테스트 해 보시면 어떨지요?
PHP가 한줄로 사용된 복잡한 구문을 잘 못 해석하는 경우도 있다고 해서요

첫번째 줄에 추가해서 숨겨진 오류까지 확인해 보시면 어떨지요?

<?php
error_reporting(E_ALL);
/*******************************************************************************
** 변수 설정
*******************************************************************************/

error_reporting(E_ALL); 을 추가해서 오류 내용 모두 올려주시면 도움이 되지 싶습니다
안녕하세요.
말씀하신데로 해봤는데... 비슷한 에러인듯합니다. ㅠㅠ

수정2 - 다시 수정하라고 보내주신 코드로 했을때입니다.
Parse error: syntax error, unexpected '[', expecting ')' in /home/hosting_users/DB명/www/_dbackup.php on line 226
Parse error: syntax error, unexpected '[', expecting ')' in /home/hosting_users/DB명/www/_fbackup.php on line 226

거기에 추가로

원본  에러리포팅 추가 - error_reporting(E_ALL);
Parse error: syntax error, unexpected '[', expecting ')' in /home/hosting_users/DB명/www/_fbackup.php on line 223
Parse error: syntax error, unexpected '[', expecting ')' in /home/hosting_users/DB명/www/_dbackup.php on line 223

처음 수정1  에러리포팅 추가 - error_reporting(E_ALL);
Parse error: syntax error, unexpected '[', expecting ')' in /home/hosting_users/DB명/www/_dbackup.php on line 214
Parse error: syntax error, unexpected '[', expecting ')' in /home/hosting_users/DB명/www/_fbackup.php on line 214
Parse error: syntax error, unexpected '[', expecting ')' in /home/hosting_users/DB명/www/_osback.php on line 214

수정2 에러리포팅 추가 - error_reporting(E_ALL);
Parse error: syntax error, unexpected '[', expecting ')' in /home/hosting_users/DB명/www/_dbackup.php on line 227
접속 정보라고 하시면 계정 정보를 주시려고 하시는 건가요?
굉장히 위험한 생각이십니다
저를 어찌 믿으시고 ㅎㅎㅎ

E_ALL 하고도 별다른 에러가 추가적으로 없는것으로 봐서는
설치된 PHP 버전이나 설정상의 문제일 수 있어 보입니다

저또한 구굴링을 통해 얻은 정보라
이 이상은 어찌할 방도를 찾지 못했습니다

단순히 배열의 '[]'를 인식하지 못하는 것이라면
처음 알려 드린 방법으로 해결이 되어야 하는데

심지어 없는 '['의 에러를 표시해 버리니 알다가도 모를일입니다
늦은 시간까지 이것 때문에 고생하고 계신건 아닌지 걱정입니다

저는 지금 막 잠에서 깨어 (저녁 먹고 체해서 쪽잠을...)
동일 환경 구성에 도전해 볼 참입니다
전체 195,356 |RSS
자유게시판 내용 검색

회원로그인

진행중 포인트경매

  1. 참여6 회 시작24.04.25 20:23 종료24.05.02 20:23
(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT