2011-07-02 2 views
1

이 코드를 실행하고 $ testpage가 영숫자 문자열이면 완벽하게 업로드됩니다. 그러나 $ testpage가 file_get_contents (...)를 사용하여 정의되면, 전혀 업로드되지 않습니다. PHP를 사용하여 문서의 내용을 가져 와서 MySQL Blob 필드에 업로드하려면 어떻게해야합니까?

<? 
... 
... 

mysql_connect(localhost,$username,$password); 
mysql_select_db($database) or die("Unable to select database"); 


$testpage = file_get_contents('http://us3.php.net/manual/en/function.file-get-contents.php'); 

$testpage = mysql_real_escape_string($testpage); 
mysql_query("INSERT INTO theTable(Description,Document) VALUES('PHP Webpage test','$testpage')"); 
mysql_close; 
?> 

나는 file_get_contents (...)는 바이너리 필드에 저장 될 수있는 문자열로 파일을 변환 할 수있는 좋은 방법이었다 PHP 워드 프로세서에서 이해했다. 내가 처리해야 할 보안 문제가 더 있음을 알고 있지만 먼저 업로드를 수행하고 거기에서부터 진행할 수 있기를 바랍니다. 이것이 작동하지 않아야하는 이유가 있습니까? 그렇다면 이것을 수행하는 가장 좋은 방법은 무엇입니까? 아니면 방금 뭔가 빠졌습니까?

감사합니다.

+0

문자열을 따옴표로 묶지 않아도됩니다. – Dogbert

+0

따옴표없이 시도했지만 ... 성공하지 못했습니다. – Rossi

+1

문자열을 따옴표로 묶어서 이스케이프 처리합니다. 이 페이지에는 쿼리에서 제대로 작동하려면 이스케이프 처리해야하는 아포스트로피 및 따옴표가 많이 포함되어 있습니다. – Maerlyn

답변

2

문자열을 올바르게 이스케이프 처리해야합니다.

<?php 
if ($stream = fopen('http://us3.php.net/manual/en/function.file-get-contents.php', 'r')) { 
    // get the entire page 
    $webpage = stream_get_contents($stream); 

    fclose($stream); 
} 
... 
... 

을 당신이 단지는 fopen을 변경할 수 있습니다 생각을 가리 :

$testpage = file_get_contents(..); 
$testpage = mysql_real_escape_string($testpage); 

mysql_query("INSERT INTO theTable(Description,Document) VALUES('PHP Webpage test','$testpage')"); 
+0

응답 해 주셔서 감사합니다. 나는 이것을 시도했지만 여전히 작동하지 않습니다 ... 제 편집을 봅니다. – Rossi

+1

@Rossi, 그건 당신의 코드에서'$ testpageFinal = " '% s'", mysql_real_escape_string ($ testpage); 그건 내 코드가하는 것이 아닙니다. – Dogbert

+0

당신이 정확합니다! 당신이 게시하기 전에 작성한 전체 % s 일은 같았지만 똑같은 생각 이었지만 그렇지 않았습니다 ... 그리고 코드가 완벽하게 작동합니다! 너무 감사합니다, @ 도버트! – Rossi

1

은 당신이 웹 페이지를 요청와 MySQL에 저장 실제로 좋아하면 대신 file_get_contentsstream_get_contents를 사용하는 것이 좋습니다 업로드 한 문서 (또는 파일) :

<?php 
$uploaddir = '/var/www/uploads/'; 
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 

$stream = fopen($_FILES['userfile']['tmp_name'], 'r'); 
// continue with the above code... 

희망이 있습니다.

+0

나는 그것을 가지고있다. 그러나 나는 장점을보기 위해 시내로 들여다 볼 것이다. 도와 주셔서 정말 감사합니다! – Rossi

+0

'stream_get_contents'가'file_get_contents'보다 나은 이유는 무엇입니까? – hakre

1

저는 데이터베이스 쿼리에 대한 래퍼 클래스를 실제로 조사 할 것입니다. 제가 사용하는 위대한 사람이 http://stefangabos.ro/php-libraries/zebra-database/입니다. 그 래퍼를 사용

, 쿼리가 간단하게 다음과 같습니다 보안 및 기능을 유지하면서 래퍼로

$db->insert('theTable', array(
    'description' => $msg, 
    'document' => $testpage 
)); 

이미 자동으로 문자열을 탈출, 당신은 코드를 줄일 수 있습니다.

+0

좋아요, 제가 확인하겠습니다 - 그건 좋은 생각 같아요! 감사 – Rossi

관련 문제