fopen — PHP: file_put_contents и запись в несколько файлов в цикле for не работает

Для некоторого фона у меня есть немного кода, который я использую для генерации HTML-файлов, которые содержат ссылку на уникальный код. В конечном итоге это заканчивается на USB-накопителе, который раздается клиентам. Это сделано в пакетном режиме, поэтому я могу создать столько пользовательских файлов с кодом, сколько необходимо.

if ( !empty($_POST) ) {

$url = trim($_POST['url']);

$codes = trim($_POST['codes']);

$codes_array = explode("\n", $codes);

$codes_array = array_filter($codes_array, 'trim');

foreach ($codes_array as $code) {

$html = <<<EOD
<html>
<head></head>
<body>
<a href="$url$code">Download Now</a>
</body>
</html>
EOD;

file_put_contents("codes/".$code.".html",$html);

}

}

Происходит только то, что в этой папке генерируется только один файл, но его имя всегда является последним элементом в массиве, другие файлы не генерируются, похоже, что файлы перезаписываются, хотя $ code различается на каждой итерации.

Я попробовал следующий код также с теми же результатами.

$fh = fopen("codes/".$code.".html", "w+");
fwrite($fh, $html);
fclose($fh);

Есть идеи?

2

Решение

замещать

$codes_array = array_filter($codes_array, 'trim');

с

$codes_array = array_map('trim', $codes_array);

Иначе только последний элемент не будет иметь \n в конце.

1

Другие решения

Вы пытаетесь:

foreach ($codes_array as $key => $value ) {

$html = <<<EOD
<html>
<head></head>
<body>
<a href="$url$code">Download Now</a>
</body>
</html>
EOD;

file_put_contents("codes/".$value.".html",$html);

}

Это тот же результат?

0

По вопросам рекламы [email protected]