Сохранить код PHP в файл, используя fwrite - PullRequest
0 голосов
/ 23 сентября 2011

У меня небольшая проблема со сценарием, над которым я работаю, и вот с чем я сталкиваюсь:

Прежде всего, немного о том, как работает сценарий.Он на самом деле использует WordPress (это плагин) и создает динамические страницы на основе различных настроек, которые они могут изменить в бэкэнде.Я добавляю функцию экспорта в HTML, где они могут сделать статическую версию этой страницы после того, как они уже создали страницу в плагине.

На этой экспортированной странице мне нужно сохранить функцию PHP наначало файла, и еще один где-то на странице.Вот что я пытаюсь сделать:

$fbscript=file_get_contents('fbscript.txt');
$newcontent=str_replace('<!-- dont erase this line -->',$fbscript,$newcontent);
$fbscript2=file_get_contents('fbscript2.txt');
$newcontent=str_replace('<!-- dont erase this line 2 -->',$fbscript2,$newcontent);

2 dont erase this line вещи находятся где-то на динамических страницах, где нужно поместить сценарии.Это то, что появляется где-то на экспортированной странице:

<br />
<b>Notice</b>:  Undefined index: signed_request in <b>C:\xampp\htdocs\wp\wp-content\plugins\easyfanpagedesign\default.theme\htmlpost-31345.php</b> on line <b>82</b><br />
<br />
<b>Notice</b>:  Undefined offset: 1 in <b>C:\xampp\htdocs\wp\wp-content\plugins\easyfanpagedesign\default.theme\htmlpost-31345.php</b> on line <b>3</b><br />

Так что я думаю, что я действительно пытаюсь спросить, как я могу сохранить файл, используя fwrite с расширением .php и иметьPHP-скрипт внутри сохраненного файла.Это пример сценария php, который я пытаюсь добавить на страницу, сохраненную с помощью fwrite (PHP SDK Facebook):

<?php
function parsePageSignedRequesttt($signed_request, $secret) {
  list($encoded_sig, $payload) = explode('.', $signed_request, 2);
  $sig = base64_url_decode($encoded_sig);
  $data = json_decode(base64_url_decode($payload), true);
  if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
    return null;
  }
  $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
  if ($sig !== $expected_sig) {
    return null;
  }
  return $data;
}
function base64_url_decode($input) {
  return base64_decode(strtr($input, '-_', '+/'));
}
?>

Это весь мой файл export.php, который выполняет все:

<?php
$content=$_POST['efpd_page_content'];
$uistyle=$_POST['efpd_ui_style'];
$app_id=$_POST['efpd_appid'];
$the_fscripts=$_POST['efpd_fscripts'];
$the_hscripts=$_POST['efpd_hscripts'];
$bgstuff=$_POST['efpd_bgstuff'];
$jquery=$_POST['efpd_jquery'];
$jqueryui=$_POST['efpd_jqueryui'];
$cycle=$_POST['efpd_cycle'];
$copytext=$_POST['efpd_copytext'];
$affstr=$_POST['efpd_affstr'];
$the_style=$_POST['efpd_style'];
$the_gwf=$_POST['efpd_gwfstyle'];
$secret=$_POST['efpd_secret'];

if(empty($secret)){$secret=999999;}

$newcontent=file_get_contents($_POST['efpd_refurl']);

$fbscript=file_get_contents('fbscript.txt');
$newcontent=str_replace('<!-- dont erase this line -->',$fbscript,$newcontent);
$fbscript2=file_get_contents('fbscript2.txt');
$newcontent=str_replace('<!-- dont erase this line 2 -->',$fbscript2,$newcontent);
$newcontent=str_replace('THE_SECRET',$secret,$newcontent);

//die(var_dump($newcontent));

$int=rand(1,99999);
$savefile = "htmlpost-$int.php";
$handle = fopen($savefile, 'w') or die("can't open file");
fwrite($handle,$newcontent);
fclose($handle);
echo "<a href='$savefile'>Right Click &gt; Save As to download the generated HTML page.</a>";
?>

Ответы [ 2 ]

2 голосов
/ 24 сентября 2011

Хорошо, ваша проблема в том, что вы не можете ссылаться на php-файл таким образом, потому что сервер его проанализируетЕсть отдельный скрипт, который устанавливает заголовок и делает его целью вашей ссылки.

header('Content-type: text/plain');
header('Content-Disposition: attachment; filename="filename.php"');
readfile('filename.php');
exit;
1 голос
/ 24 сентября 2011

Хорошо, теперь, когда вы обновили свой вопрос, решение довольно простое:

Вы получаете эти результаты, когда делаете то, что говорит ваша ссылка, верно?Вы щелкаете правой кнопкой мыши по этой ссылке и делаете «Сохранить как ...», но на самом деле вы не сохраняете код php, а просто то, что сервер выводит, когда код php сначала выполняется сервером.

...