PHP에서 로컬 캐릭터 라인을 파일에 저장하는 방법?

이 포스팅은 내 괴짜 시리즈의 두 번째 일이다.

내 테마 마약 쟁이를 프로그래밍하는 동안, 나는이 문제를 건너 왔어요. 내 PHP 프로그램에서 내 서버에 문자열을했다 (불통 스타일 시트, 사실로), 나는 사용자에게 파일을 자신의 컴퓨터에 저장하는 옵션을주고 싶어. 나는 이것이 일반적인 문제라고 생각했습니다 것, 모든 일반적인 문제는 인터넷 검색에 의해 해결 될 수있다. 하지만, 보라 보라, 난 그냥 만족스러운 해결책을 찾을 수 없습니다. 난 내 자신을 발견, 그리고 난 여기가 주 것이라고 생각, 모든 미래 구글의 이익을 위해 아직 오지 및 이동.

우리는 솔루션에 가기 전에, 의 문제가 무엇인지 이해하자. 문제는 두 컴퓨터 사이의 분업에 — 하나는 서버이며, 여기서 워드 프레스와 PHP가 실행되고; 다른보기가 진행중인 클라이언트 컴퓨터이며. 우리가 얘기하는 문자열은 서버에. 우리는 클라이언트 컴퓨터의 파일에 저장하고 싶은. 그것을 할 수있는 유일한 방법은 HTML 응답으로 문자열을 제공하는 것입니다.

언뜻, 이것은 큰 문제처럼 보이지 않는. 결국, 서버는 클라이언트에 주기적 문자열과 데이터를 보낼 — 그것은 우리가 브라우저에 아무 것도 방법, 당신이 읽는 책의 내용을 포함. 이 문자열을 저장하고 싶어 그냥 PHP 프로그램 인 경우, 이는 문제가되지 않을 것이다. 당신은 서버에서 파일에 문자열을 덤프 파일을 제공 할 수.

당신이 세상에게 당신의 서버에있는 파일에 문자열을 덤핑하는 방법을 제공하지 않으려면하지만 당신은 무엇을해야합니까? 음, 당신이 뭔가를 할 수 있습니다:

<?php
header('Content-Disposition: attachment; filename="style.css"');
header("Content-Transfer-Encoding: ascii");
header('Expires: 0');
header('Pragma: no-cache');
print $stylestr ;
?>

그래서, 그냥 문자열 $ stylestr을 계산하여 foo.php에서이 코드를 삽입하면 모든 작업이 완료된다. 그러나 우리의 문제는 우리가 워드 프레스 플러그인 프레임 워크에서 작업하는 것입니다, 및 헤더를 사용할 수 없다() 통화. 당신은 그렇게 할 때, 당신은 헤더가 이미 친구를 수행 말하는 오류 메시지가 표시됩니다. 이 문제에 대한, 나는 내가 사용하는 플러그인 중 하나에 독창적 인 해결책을 발견. 어느 분실, 그러나 나는 그것이 일반적인 기술 추측. 이 솔루션은 비어있는 iframe이를 정의하고 PHP 함수를 작성합니다 무슨 소스를 설정하는 것입니다. iframe이는 전체 HTML 소스를 기대하고 있기 때문에, 당신은 수 있습니다 (사실로, 의무감) 헤더를 제공합니다() 지침. 코드는 다음과 같이 보입니다:

<iframe id="saveCSS" src="about:blank" style="visibility:hidden;border:none;height:1em;width:1px;"></iframe>
<script type="text/javascript">
var fram = document.getElementById("saveCSS");
<?php echo 'fram.src = "' . $styleurl .'"' ;
?>

이제 질문입니다, 소스는 무엇을해야? 환언, $의 styleurl은 무엇인가? 분명히, 그것은 당신의 서버에 정적 파일을 될 수 없습니다. 이 글의 목적은 모든 서버의 파일을해야하지 않는 것을 보여주는 것이다. 이는 두 부분 해답. 당신은 당신이 워드 프레스 프레임 워크 내에서 작동하는지 기억해야한다, 당신은 독립 PHP 파일을 만들 수 없습니다. 당신이 할 수있는 유일한 방법은 기존의 PHP 파일에 인수를 추가하는 것입니다, 또는 플러그인 당신이 만든. 당신이 첫번째 확인 그래서 다음과 같이 제출 버튼을:

<form method="post" action="<?php echo $_SERVER["REQUEST_URI"]?>">
<div class="submit">
<input type="submit" name="saveCSS" title="Download the tweaked stylesheet to your computer" value="Download Stylesheet" />
</div>

버튼의 이름 속성이 있음을 유의 “saveCSS.” 지금, 코드의 일부는 그 핸들을 제출, 당신이 뭔가를 할:

<?php
if (isset($_POST['saveCSS']))
$styleurl = get_option('siteurl') . '/' . "/wp-admin/themes.php?page=theme-tweaker.php&save" ;

?>

이것은 당신이 당신의 iframe이의 소스로 줄 것 $의 styleurl입니다, 앞으로. 그것은 사용자 pluging 페이지 URL과 같은 유의, 추가 관리하는 것을 제외 “?저장” 그것의 끝에. 다음 트릭은 인수를 캡처하고 그것을 처리하는 것입니다. 그 내용은, 당신은 워드 프레스 API 함수를 사용하여, add_action로:

<?php
if (isset($_GET['save'] ))
add_action('init', array(&$thmTwk, 'saveCSS'));
else
remove_action('init', array(&$thmTwk, 'saveCSS'));
?>

이것은 당신의 플러그인의 초기화 부분에 함수 saveCSS 추가. 지금 당신은이 함수를 정의해야:

<?php
function saveCSS() {
header('Content-Disposition: attachment; filename="style.css"');
header("Content-Transfer-Encoding: ascii");
header('Expires: 0');
header('Pragma: no-cache');
$stylestr = "Whatever string you want to save";
ob_start() ;
print $stylestr ;
ob_end_flush() ;
die() ;
}
?>

이제 우리는 집에 거의 무료입니다. 이해하는 유일한 방법은 당신 것입니다 do 다이 필요(). 함수는 죽지 않는 경우, 그것은 당신의 저장 파일에 워드 프레스 생성 된 물건의 나머지 밖으로 내 뿜합니다, 당신의 문자열 $ stylestr에 추가.

좀 복잡해 보일 수 있습니다. 음, 나는 그것이 조금 복잡 같아요, 하지만 당신은 그것을 구현 및 실행 일단, 당신은 할 수 (및 수행) 잊어. 적어도, 내가 할. 난 여기가 게시 이유, 그래서 다음 번에 ​​내가 필요를 수행하는, 나는 그것을 찾아 볼 수 있습니다.

댓글