0

更清楚地说,我确实了解如何使用我正在使用的 php 创建一个新的 php 文件fwrite,如下所示:

//actually create the file now

$my_file=$post_title_edited . ".php";;

$fh= fopen($my_file, 'w');

fwrite($fh, $head);
fwrite($fh, $body);
fwrite($fh, $php);
fwrite($fh, $php2);
fwrite($fh, $php3);
fwrite($fh, $phpend);
fwrite($fh, $end); 
fclose($fh);

//redirect to created file
header("location:". $post_title_edited .".php");

现在一切正常,或者更确切地说,如果不是因为这个问题,它会:

$php3='

session_start();

if(isset($_SESSION['login'])){
    $myusername = $_SESSION['login'];

    echo '  <div id="header-logedin">
              <h3>Hello ' . $myusername . '</h3>
              <a href="login/logout.php">Log out</a>
            </div><!--header-logedin-->
         ';
} else {
    echo $log;
}

如您所见,当我开始设置时$php3,它被我第一次会话调用的登录名中的撇号中断。因此它无法设置,反过来我也无法将它写入我的新文件,也$php2有同样的问题。

我想做什么?简而言之:用户从 index.php 发布的信息发布到由该代码创建的新页面上,然后根据 sql 表检查数据以确保它不存在,非常像一个论坛。我真的希望这是一件复杂的事情,我不会忽视一些非常明显的事情。提前致谢。

4

1 回答 1

1

目前尚不清楚您要做什么,但是您似乎遇到了逃避问题。

要使撇号实际上不结束字符串,您可以:

  • 用斜杠转义它,如下所示:

    $s = 'string with \'single quotes\' inside'
    
  • 在里面使用双引号:

    $s = 'string with "double quotes" inside'
    
  • 使用heredoc。

    $s = <<<END
    This string uses a heredoc. So it doesn't use 'single' or "double" quotes.
    END;
    

编辑: 还要检查您是否正在尝试做一些明智的事情。问问自己:你真的需要创建一个新的 PHP 文件吗?通过这样做,你肯定会给你的代码增加太多的复杂性,还有奇怪的、几乎无法检测到的错误,可能还有一堆安全问题。

于 2012-10-25T23:21:55.063 回答