2009-11-25 6 views
1

왜 데이터에 밑줄이 있습니까?PHP는 filename 변수에 밑줄을 표시합니까?

코드를 쉽게 읽을 수있는 방법이 있나요? 코드 가독성 측면에서 더 의미가 있습니까?

내 분석 :

$filename = 'data_'.$_REQUEST['postmessage'].'.txt'; 

나는 오전 :

data_이 양식에서 변수 postmessage 통해 메시지를 요청하고 있는지가 텍스트의하고이 모든 것을 연결하여, data_ 무엇이든 취할 예정이다 초보자 및이 코드의 분석이 잘못 될 수는 있지만 실수로 배우기를 기꺼이합니다.

+0

나는 당신이 여기 달성하려는 모르겠어요. 양식에서 지정된 파일에 대해 I/O 작업을 수행 하시겠습니까? –

+0

FWIW 좋은 질문이라고 생각합니다. – John

+1

위의 +1을 사용하면 누구든지 질문을 무효화 할 수 있습니다. 이것은 유효한 기술적 인 질문입니다. 왜 누군가가 그것을 downvote 모르겠다. –

답변

6

의 조금을 파괴하자

  1. $ 파일 이름 =-$filename라는 변수에 값을 할당.
  2. data_ - 문자열입니다.
  3. $ _REQUEST [ 'PostMessage를'] -.. PostMessage를 요청 매개 변수의 값 (수 중 POST, GET 또는 COOKIE 매개 변수 당신이 절대적으로 필요하지 않는 한, 너무 자주 $_REQUEST를 사용하지 않는 시도 $_GET를 사용하거나 대신 $_POST). 이것은 귀하의 양식에서 온 것입니다 (당신이 언급했듯이).
  4. '. txt' - 그냥 문자열입니다.

위의 요소 사이의 점은 문자열을 연결하는 데 사용됩니다.

귀하의 의견에 대해 "그리고 그것이 텍스트인지 확인하십시오"- 잘못되었습니다. 텍스트인지 확인하지 않습니다. 당신은 자신을 확인해야하고 아마도 보안상의 이유로해야합니다.

+0

많은 정보를 제공해 주셔서 감사합니다. – Newb

0

원하는 것에 따라 다릅니다. $_REQUEST['postmessage']"foo"이 포함되어 있다고 가정 해 보겠습니다. 첫 번째 예제는 $filename = 'data_foo.txt', 을 생성하고 두 번째 예제는 $filename = 'data.txtfoo'을 생성합니다. (질문에서 두 번째 예가 OP로 제거되었습니다.)

첫 번째 결과가 원하는 것으로 추측되지만 사용자의 필요에 따라 다릅니다. 그것은 단지 문자열 연결 일뿐입니다.

1

이 코드에서 문자열을 시퀀싱하는 것처럼 보입니다.

. 연결 연산자입니다.

그래서 $ 파일 이름은

data_somethingorother.txt 

밑줄은 당신이 건설하고있는 문자열의 일부 포함됩니다.

1

파일 이름의 일부입니다. 파일 이름에 왜 파일 이름이 포함되어 있는지 묻지 마십시오 ...
값을 사용하기 전에 $_REQUEST['postmessage']에 들어오는 내용의 유효성을 검사하지 않으므로 안전하지 않습니다.

0

가독성과 관련하여 문자열 연결 연산자 .을 공백으로 묶으십시오. 따라서, 같은 : PHP-대상 구문 강조와 텍스트 편집기/IDE를 사용하여

$filename = 'data_' . $_REQUEST['postmessage'] . '.txt'; 

도 많은 도움이 될 수 있습니다. 기본적인 PHP 튜토리얼도 그렇게 할 것입니다.

0

다른 사람들처럼 GET/POST 변수로 파일 이름을 구성하고 있습니다. 지금까지 가독성에 관해서는 괜찮다고 생각합니다.

그러나 GET/POST 변수를 사용하거나 사용자가 변경할 수있는 파일 경로를 만들 때 매우주의해야합니다. 나는 거의 항상 당신이 그것을하지 말아야한다고 말할 것입니다. 당신이가는 경우에, 적어도 postmessage=../../filename 같이 일을 할 수 없다는 것을 확인하십시오.

0

동감,

그러나, 나는 요청 변수를 저장하는 변수를 정의하는 것입니다. 코드를 읽기 쉽도록 디버깅하기 쉽습니다. 또한 위생 처리를보다 효과적으로 수행합니다.

$postMessage = $_REQUEST['postmessage']; $filename = 'data_' . $postMessage . '.txt';