fopen写变量问题

时间:2019-04-12 01:33:42

标签: php

小项目-残破的打字才能使其正常运行-如果您有任何想法,请告诉我tku!这个后期程序需要更多的单词,所以我们开始吧

<?php
$row = 1;
if (($handle = fopen("issue-heads-1.csv", "r")) !== FALSE) {        

    while (($data = fgetcsv($handle)) !== FALSE) {

            if ($row == 2) {
            $file = fopen($data[14], "w");
            $write = '
            <?php
                include "/home/history/public_html/issue1.php";
                echo \'<a class="prev" href="\' . $data[16] . \'">\';
            ?>
            ';
            fwrite($file, $write);
            fclose($file);
            }
        $num = count($data);

        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}
?>

3 个答案:

答案 0 :(得分:1)

快速猜测-试试(未经测试):

        $write = '
        <?php
            include "/home/history/public_html/issue1.php";
            echo \'<a class="prev" href="' . $data[16] . '">\';
        ?>
        ';

使用多引号有点棘手...认为您可能已经忘记了哪些需要转义...

嗯...所以行不通...我接下来要尝试的是在几行上构造$ write变量(希望使工作更容易一些,因此也许更容易避免错误)-注意我还重复了一次filewrite来查看输出是什么:

$hF = fopen('__debug.log', "a"); //outside your loop

//inside loop
$hrf = $data[16];
$write = '<?php' + "\n";
$write .= 'include "/home/history/public_html/issue1.php";' + "\n";
$write .= "echo '<a class=\"prev\" href=\"";
$write .= $hrf;
$write .= "\">';" + "\n";
$write .= '?>';
fwrite($hF, $write);

并确保在脚本结束之前关闭文件:

//outside the loop
fclose($hF);

答案 1 :(得分:1)

如果您的CSV标头中有唯一的标头

$headers = [];

while (false !== ($data = fgetcsv($handle))) {
     if(empty($headers)){
          $headers = $data;  //["foo", "bar"] (for example)
          continue; //skip to next iteration
     }
      //$data [1,2] (for example)

     $row = array_combine($headers, $data);

     //$row = ["foo"=>1,"bar"=>2] (for example)

}

现在您可以使用文本标题代替16等了

要注意的一件事是数组组合对数组的长度非常敏感。也就是说,如果它出错,则您可能有重复的键(数组键是唯一的),或者该行有一个额外的,或一个丢失的键。

数组合并将第一个参数作为键,将第二个参数作为值,并将它们组合为一个关联数组。这样做还有一个好处,就是CSV列的顺序并不重要(这可能很重要)。

PS ,因为我不知道您的标题是什么,我将把这一部分留给您。但可以说#16issues。现在,您可以像数据库源代码一样简单地进行$row['issues'] ...

干杯。

答案 2 :(得分:1)

在fopen语句中使用write语句中的变量无效。我最终不得不使用ob_start使其工作。为使我走上正确的道路而乱七八糟。

<?php

ob_start();
include 'issue1.php';
$issueone = ob_get_contents();
ob_end_clean();

$row = 1;
    if (($handle = fopen("issue-heads-1.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle)) !== FALSE) {  
            $csv[] = $data;
        }
    fclose($handle);
    }       
        $file = fopen($csv[$row][14], "w") or die("Unable to open file!");
            fwrite($file, $issueone);
            fwrite($file, "<a class=\"prev\" href=\"" . $csv[$row][16] . "\">");
        fclose($file);

print "ok";

?>