Fopen пишет с проблемой переменной

небольшой проект - тупой набор текста, чтобы заставить его работать - если у вас есть какие-либо идеи, пожалуйста, дайте мне знать, тку! Эта почтовая программа требует больше слов, так что приступим

<?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);
}
?>

Пожалуйста, объясните больше о своей проблеме, так как контекста для работы не так много.

user11337181 12.04.2019 03:36

у вас есть шаблон веб-страницы php, и вам нужно использовать его, чтобы создать еще сотни для библиотеки. У меня есть CSV-файл, из которого я извлекаю данные для вставки в шаблон, а затем сохраняю каждый файл. Оператор эха в операторе записи не работает — он не понимает переменную.

curious55 12.04.2019 04:24

Ваши заголовки CSV уникальны?

ArtisticPhoenix 12.04.2019 05:53

Привет Любопытный - продолжаю снова. Спасибо за предоставленный ответ, который показывает, как вы решили проблему. Напоминаем вам, чтобы вы выбрали свой собственный ответ как «Лучший ответ», нажав на галочку рядом с ответом. Это закроет этот вопрос. Спасибо!

cssyphus 27.06.2019 15:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
79
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Быстрая догадка - попробуйте (не проверено):

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

Это немного сложно с несколькими кавычками... думаю, вы, возможно, потеряли представление о том, какие из них нужно экранировать...

Хмммм... так что это не сработало... Следующее, что я хотел бы сделать, это построить переменную $write в нескольких строках (надеюсь, это немного облегчит работу, так что, возможно, будет легче избежать ошибок) - обратите внимание, что я также добавил повторяющуюся запись файла, чтобы увидеть результат:

$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);

отличная попытка - вывод был: <a class = "prev" href = ""> <== href пуст. Когда я печатаю $data[16] над оператором записи, я вижу URL в порядке, поэтому я знаю, что данные находятся в переменной. Я предполагаю, что мне нужно каким-то образом передать содержимое переменной оператору записи.

curious55 12.04.2019 04:45

Добавлена ​​еще пара предложений... возможно, одна из этих низкотехнологичных бритв поможет вам определить ошибку, после чего вы сможете реорганизовать свой код, чтобы он был структурирован так, как вы действительно этого хотите. (Опять же, весь мой код нестандартен, поэтому, пожалуйста, перепроверьте синтаксис и т. д.)

cssyphus 12.04.2019 05:21

Предупреждение: в /home/history/public_html/lemon.php в строке 12 обнаружено нечисловое значение. Предупреждение: в /home/history/public_html/lemon.php в строке 12 обнаружено нечисловое значение. значение, обнаруженное в /home/history/public_html/lemon.php в строке 13. Предупреждение: нечисловое значение, обнаруженное в /home/history/public_html/lemon.php, в строке 13. Предупреждение: нечисловое значение, обнаруженное в /home/. history/public_html/lemon.php в строке 16 Предупреждение: в /home/history/public_html/lemon.php в строке 16 обнаружено нечисловое значение.

curious55 12.04.2019 05:31

строки 12-16 $write = '<?php' + "\n"; $write .= 'включить "/home/history/public_html/issue1.php";' + "\п"; $write .= "echo '<a class=\"prev\" href=\""; $write .= $hrf; $write .= "\">';" + "\п";

curious55 12.04.2019 05:33

журнал отладки: 00echo '<a class = "prev" href = "0?>

curious55 12.04.2019 05:35

у вас есть данные[16] для производства — молодец! Отдельные операторы записи казались уловкой. fwrite($hF, $записать); ничего не пишет в файле $data[14] - мне придется продолжать работать над этим

curious55 12.04.2019 06:11

Если у вас есть уникальные заголовки в вашем 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, поскольку я понятия не имею, какие у вас заголовки, я оставлю эту часть на ваше усмотрение. Но скажем, #16 есть issues. Теперь вы можете просто сделать $row['issues'] как источник БД и т. д.

Ваше здоровье.

Kool, - вы также можете использовать SplFileObject для чтения CSV, если вы хотите, чтобы с ним работал более объектно-ориентированный API. Он также отслеживает, на какой линии вы находитесь и т. д.

ArtisticPhoenix 12.04.2019 06:04
Ответ принят как подходящий

Использование переменной внутри оператора записи не работало внутри оператора fopen. В итоге мне пришлось использовать 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";

?>

Доброе утро - рад, что вы решили эту проблему, и спасибо, что сообщили нам, как вы ее решили. +1

cssyphus 12.04.2019 15:22

Другие вопросы по теме