небольшой проект - тупой набор текста, чтобы заставить его работать - если у вас есть какие-либо идеи, пожалуйста, дайте мне знать, тку! Эта почтовая программа требует больше слов, так что приступим
<?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);
}
?>
у вас есть шаблон веб-страницы php, и вам нужно использовать его, чтобы создать еще сотни для библиотеки. У меня есть CSV-файл, из которого я извлекаю данные для вставки в шаблон, а затем сохраняю каждый файл. Оператор эха в операторе записи не работает — он не понимает переменную.
Ваши заголовки CSV уникальны?
Привет Любопытный - продолжаю снова. Спасибо за предоставленный ответ, который показывает, как вы решили проблему. Напоминаем вам, чтобы вы выбрали свой собственный ответ как «Лучший ответ», нажав на галочку рядом с ответом. Это закроет этот вопрос. Спасибо!






Быстрая догадка - попробуйте (не проверено):
$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 в порядке, поэтому я знаю, что данные находятся в переменной. Я предполагаю, что мне нужно каким-то образом передать содержимое переменной оператору записи.
Добавлена еще пара предложений... возможно, одна из этих низкотехнологичных бритв поможет вам определить ошибку, после чего вы сможете реорганизовать свой код, чтобы он был структурирован так, как вы действительно этого хотите. (Опять же, весь мой код нестандартен, поэтому, пожалуйста, перепроверьте синтаксис и т. д.)
Предупреждение: в /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 обнаружено нечисловое значение.
строки 12-16 $write = '<?php' + "\n"; $write .= 'включить "/home/history/public_html/issue1.php";' + "\п"; $write .= "echo '<a class=\"prev\" href=\""; $write .= $hrf; $write .= "\">';" + "\п";
журнал отладки: 00echo '<a class = "prev" href = "0?>
у вас есть данные[16] для производства — молодец! Отдельные операторы записи казались уловкой. fwrite($hF, $записать); ничего не пишет в файле $data[14] - мне придется продолжать работать над этим
Если у вас есть уникальные заголовки в вашем 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. Он также отслеживает, на какой линии вы находитесь и т. д.
Использование переменной внутри оператора записи не работало внутри оператора 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
Пожалуйста, объясните больше о своей проблеме, так как контекста для работы не так много.