소프트웨어 php array 내부에서 if처리 가능한가요?
2017.08.12 05:52
if로는 안 되는걸로 알고 있는데 분기시킬 필요가 있어서 질문 남겨봅니다
array(
'tag' => 'jwp',
'type' => 'unparsed_commas_content',
'content' => ($context['browser']['is_ie'] && !$context['browser']['is_mac_ie'] ? '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="$2" height="$3"><param name="movie" value="' . $settings['default_theme_url'] . '/player.swf" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="wmode" value="transparent" /><param name="flashvars" value="file=$1&image=$4" /><embed src="' . $settings['default_theme_url'] . '/player.swf" width="$2" height="$3" bgcolor="#000000" allowscriptaccess="always" allowfullscreen="true" flashvars="file=$1&image=$4" /><noembed><a href="$1" target="_blank" class="new_win">$1</a></noembed></object>' : '<div class="flowplayer" style="width:$2px;height:$3px;"> <video poster="$4"> <source type="video/mp4" src="$1"></video></div>'),
'validate' => create_function('&$tag, &$data, $disabled', '
if (isset($disabled[\'url\']))
$tag[\'content\'] = \'$1\';
elseif (strpos($data[0], \'https://\') !== 0 && strpos($data[0], \'https://\') !== 0)
$data[0] = \'https://\' . $data[0];
'),
'disabled_content' => '<a href="$1" target="_blank" class="new_win">$1</a>',
),
문제의 코드입니다
수정하고하자는 부분은 content의 분기된 flowplayer부분입니다
$4가 지정된 경우는 poster="$4"를 출력하고, 아닌 경우는 출력하지 않는게 목표입니다
댓글 [6]
-
taskmgr.exe 2017.08.12 18:38 -
DarknessAngel 2017.08.12 20:00
게시판의 BBC코드 처리하는 부분이라 별 수 없습니다
입력할때 [jwp 가로,세로,섬네임]영상주소[/jwp]이런식으로 입력해주면 이걸 파싱해서 html코드로 자동 변환해야해서 필연적으로 저런식으로 통째로 쑤셔박는 수 밖에 없습니다
sql을 뒤져서 어찌 안 되나 쳐다봤더니 body 안에 통째로 게시물 내용을 하나씩 쑤셔박아놔서 가망이 없습니다 (랄까 어떻게 파싱하는지도 이해불능)
추신 : 그런데 $4=$4 하면 항상 true가 되는데 비교하는 의미가 있는지?
추신2 : 제가 구현한것말고도 원래 FlowPlayer 추가하는 확장 기능 있는데, 이부분 골치아팠는지, poster부분은 누락시켜져있습니다 (다만 기존에 해당 기능이 존재하는걸 그대로 마이그레이션시키는게 목표라서 구현하고자 하는겁니다)
-
taskmgr.exe 2017.08.12 20:34 추신 : 그런데 $4=$4 하면 항상 true가 되는데 비교하는 의미가 있는지?
→ 변수 자체가 아니라 값 유무를 체크해서 해당 변수에 값이 들어있으면 덮어쓰는 겁니다.
$4에 "https://server.com/poster.jpg"가 들어있으면 " poster="https://server.com/poster.jpg""로 바꿉니다.
그리고 해당 배열을 <object> 태그와 <video> 태그로 분기시키는데, 그럴필요 없이
<video>
<source src="https://server.com/a.mp4">
<object ...></object>
</video>
위처럼 하면 video 태그 미지원 브라우저 접속시 알아서 폴백됩니다.
추가로 poster에 들어갈 $4 값이 비어있으면 브라우저단에서 무시될텐데요. 굳이 힘들게 poster 속성 자체를 없애야 하는지?
-
DarknessAngel 2017.08.12 21:58
잘못 봤군요 (==인줄 알았습니다)
전체 파일 첨부해놨는데, $숫자가 글로벌로 정의된게 아니라서 밖에서 호출할 수 없습니다 (심지어는 array의 값 입력 초기부분인 => 직후에서 !=같은거 걸어도 에러낼정도) (이 문제때문에 조건 분기가 안 되서 글 올린건데, 파일 전체 훌어봐도 대체 $숫자값이 구체적으로 뭘 호출하고, 어떻게 할당되는지 이해불능입니다)
위의 분기시키는건 원본 소스에 있던건데 손 안 되고 내버려둔겁니다 (차후 수정해서 html5 영상 재생 불가 브라우저경우 플레쉬 기반 플레이어 찾아가게 만들려고 남겨둔겁니다) (삭제해도 상관은 없습니다)
$4가 미입력이라도 괜찮으면 처음부터 삽질 안 해도 되서 편하겠지만, 만일 $4가 미입력이면 나중에 html에서 그대로 poster="$4"로 뜨고, 플레이어자체가 속성 일단 정의해버리면 무시 못하는 구조라서 심지어는 poster=""로 되어있어도 예외없이 403뜹니다
사용중인 플레이어는 소스에도 나오는 FlowPlayer 7.0.4(최신) html5버전입니다
기존의 플레이어 전부 flash기반의 구버전 jwplayer 5.8기반이었는데, 이번 기회에 서버에서 플러그인 기반인 기능등의 잠재적 보안 불안 요소 일소하기 위해서 다 뜯어고치는 과정에서 교체된겁니다 (보안 문제도 있고, 무겁고, 모바일 미지원이고, 20년에 adobe가 flash지원 중단 선언함에 따라 주요 브라우저들이 flash제거를 위한 단계를 밣고 있는것도 원인입니다)
추신1 : $4=$4시도하니 sytex error, unexpected '4' (T_Number), expecting variable (T_VARIABLE) or '{' or '$' in Subs.php line 1193이라 뜹니다 (아무래도 $4를 변수로 못 알아먹는듯)
추신2 : ?:분기라면 배열 내부에서도 사용 가능 (본문 참조)합니다 (꼭 밖에서 분기할 필요는 없음)
추신3 : ' Poster=$4'로 처리하면 절대 안 됩니다 (반드시 'Poster=$4'야 정상적으로 처리됩니다 (공백은 앞의 Video부분에 붙여야 평문으로 처리됩니다)
-
taskmgr.exe 2017.08.13 00:59 $1, $2, ... 변수도 입력값에 따라 자동 증식되는것 같네요.
같은 $n 이라도 배열마다 값이 다른것같기도 하고..
태그분기 어쩌고 폴백얘기는 이미 배열 내의 content를 $context['browser'] 변수로 분기처리하는데 그 안에서 또 $4 분기처리는 안되지 싶어서 언급했습니다.
(if else도 아니고 ?: 분기 내에서 하위 분기처리가 가능하던가요? 저도 좀 한수 배워보고싶음)
그리고 변수에 값이 없으면 아무것도 찍히지 않아야 정상 아닌가요? $4 그대로 찍히는건 좀 이상한데..
content 부분을 아래처럼 하면 어떨까 싶은데요. 물론 php 돌릴 환경이 안돼서 되는지 안되는지 테스트는 없습니다.
'content' => '<div class="flowplayer" style="width:$2px;height:$3px;"><video '.($4 ? 'poster="$4"' : '').'><source type="video/mp4" src="$1"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="$2" height="$3"><param name="movie" value="' . $settings['default_theme_url'] . '/player.swf" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="wmode" value="transparent" /><param name="flashvars" value="file=$1&image=$4" /><embed src="' . $settings['default_theme_url'] . '/player.swf" width="$2" height="$3" bgcolor="#000000" allowscriptaccess="always" allowfullscreen="true" flashvars="file=$1&image=$4" /><noembed><a href="$1" target="_blank" class="new_win">$1</a></noembed></object></video></div>',
-
DarknessAngel 2017.08.12 19:58
$4입력 여하로 처리하기 힘들다면 str계열로 https/https/ftp등으로 시작하는지를 판단해서 처리해도 될듯합니다 (웬지 모르게 제가 해보니 문법 에러냈지만)
$4라는걸 비교대상으로 직접 지정 불가능해보입니다 ($4 == ''이나 EMPTY($4)등이 다 안 먹힘)
구현자체는 간단하게 조건문 ? 'poster=$4' : ''으로 충분한데, 대체 뭘 조건으로 지정해야할지 불명확한 상태입니다
번호 | 제목 | 글쓴이 | 조회 | 등록일 |
---|---|---|---|---|
[공지] | 질문과 답변 게시판 이용간 유의사항 | gooddew | - | - |
70158 | 윈 도 우| win PE에서 DVD드라이브(Y)의 용도는 무엇인가요? [6] | pinedragon | 472 | 09-01 |
70157 | 기 타| KT 인터넷 관련...(내용 길어요) [6] | 야만 | 1261 | 08-31 |
70156 | 윈 도 우| 구버전 드라이버가 자꾸 자동으로 설치됩니다 [6] | 솔트 | 1155 | 08-31 |
70155 | 기 타| 윈도우포럼 진입시 인증서 오류문제?? [5] | 넷파이더 | 743 | 08-31 |
70154 | 윈 도 우| 휴휴... 다음 사이트만 이미지가 엑박으로 뜨는 문제..... [5] | 배움이 | 902 | 08-31 |
70153 | 하드웨어| 노트북 액정 부품 판매 하는 사이트 알려주세요 [7] | 우주 | 1063 | 08-31 |
70152 | 윈 도 우| computer browser 서비스 질문이요 [2] | asgdsadg | 274 | 08-31 |
70151 | 하드웨어| usb hdd 사용하면서 [5] | 雪耳 | 459 | 08-31 |
70150 | 윈 도 우| ntbootautofix로 부팅복구후...... [1] | 사랑인 | 275 | 08-31 |
70149 | 윈 도 우| 내부IP 고정을 와이파이마다 다르게 설정할 수 없을까요 [2] | 유기농초코 | 582 | 08-31 |
70148 | 윈 도 우| Grub4dos 에러 문의드립니다. | 일망 | 220 | 08-31 |
70147 | 윈 도 우| 윈10 부팅이상 및 종료시. . . [5] | never | 961 | 08-31 |
70146 | 서버 / IT| 네트워크 식별오류 [2] | 바른손 | 445 | 08-31 |
70145 | 윈 도 우| [언파킹]cpu이용률100% 왜뜨는지아시는분.(프로세스유휴사... | 미미마 | 5641 | 08-30 |
70144 | 윈 도 우| 인텔 코어i5-7세대 7500 (카비레이크) 윈도우7 설치 관련 [11] | 전저당께요 | 2554 | 08-30 |
70143 | 윈 도 우| 윈빌더 8.1에서 FTP 서버 접속하려면 어떻게 하나요? [2] | 지룡자 | 223 | 08-30 |
70142 | 윈 도 우| 무X산님 08-29버전윈도우에서.. [3] | 슈슈 | 323 | 08-30 |
70141 | 윈 도 우| 윈도우10 바탕화면 튕김현상, 이상증상 로그확인법 | Sting | 1659 | 08-30 |
70140 | 윈 도 우| 윈도우10 대기화면(로그인)으로 안넘어가게 하고 싶습니다. [4] | rainyheart | 4769 | 08-30 |
70139 | 윈 도 우| PE부팅시 """주사율범위초과""&q... [8] | 포럼회원 | 2003 | 08-30 |
어휴, 뭔놈의 배열에 html 태그세트를 통째로;;
저 배열 선언 전에 분기처리하면 안되던가요?
$4 = $4 ? ' poster="$4"' : '';