#php
#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);
}
?>
Комментарии:
1. Пожалуйста, объясните подробнее о вашей проблеме, поскольку для работы не так много контекста.
2. у вас есть шаблон веб-страницы php, и вам нужно использовать его для создания еще сотен для библиотеки. У меня есть файл csv, из которого я извлекаю данные для вставки в шаблон, и затем каждый файл сохраняется. Оператор echo в операторе write не работает — он не понимает переменную.
3. Уникальны ли ваши заголовки CSV?
4. Привет, любопытный — повторяю. Благодарим вас за предоставленный ответ, который показывает, как вы решили проблему. Напоминаю вам, пожалуйста, выберите свой собственный ответ в качестве «Лучшего ответа», нажав на галочку рядом с ответом. Это закроет этот вопрос. Спасибо!
Ответ №1:
Быстрое предположение — попробуйте (непроверенный):
$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);
Комментарии:
1. отличная попытка — результат был: <a class=»prev» href=»»> <== href пустой. Когда я печатаю $data[16] над инструкцией write, я вижу URL ok, поэтому я знаю, что данные находятся в переменной. Я предполагаю, что мне нужно каким-то образом передать содержимое переменной в оператор write.
2. Добавлена еще пара предложений… возможно, одна из этих низкотехнологичных бритв поможет вам определить ошибку, после чего вы сможете реорганизовать свой код, чтобы он был структурирован так, как вы действительно этого хотите. (Опять же, весь мой код не соответствует действительности, поэтому, пожалуйста, перепроверьте синтаксис и т. Д.)
3. Предупреждение: нечисловое значение, встречающееся в /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
4. строк 12-16 $запись = ‘<?php’ «n»; $write .= ‘include «/home/history/public_html/issue1.php»;’ «n»; $write .= «echo ‘<a class=»prev» href=»»; $write .= $hrf; $write .= «»>’;» «п»;
5. журнал отладки: 00echo ‘
Ответ №2:
Использование переменной внутри инструкции write не работало внутри инструкции 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. Доброе утро — рад, что вы решили эту проблему, и спасибо, что сообщили нам, как вы ее решили. 1
Ответ №3:
Если у вас есть уникальные заголовки в вашем 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
etc…
Следует быть осторожным с тем, что объединение массивов очень чувствительно к длине массивов. Тем не менее, если он выдает ошибку, у вас либо дубликаты ключей (ключи массива уникальны), либо у вас есть дополнительный ,
или отсутствующий для этой строки.
Объединение массива принимает первый аргумент в качестве ключей, а второй — в качестве значений и объединяет их в ассоциативный массив. Это имеет дополнительное преимущество в том, что порядок ваших столбцов CSV не будет иметь значения (что может иметь большое значение).
PS поскольку я понятия не имею, каковы ваши заголовки, я оставлю эту часть на ваше усмотрение. Но допустим #16
, есть issues
. Теперь вы можете просто делать $row['issues']
так же, как источник DB и т. Д…
Приветствия.
Комментарии:
1. Kool, — вы также можете использовать SplFileObject для чтения CSV, если вам нужен более объектно-ориентированный API для работы. Он также отслеживает, на какой строке вы находитесь и т. Д…