Если значение текста семантически сильно , используйте strong
элемент. В противном случае используйте семантический именованный класс (тот, который ясно показывает значение элемента, не смешивайте представление и данные путем вызова его bold
и т.д.), и сошлитесь на него в CSS.
.important-message {
font-weight: bold;
}
HTML
Некоторые люди все еще используют b
элемент как представляемый рычаг, но он не был удержан от использования , хотя большинство людей одобряет strong
элемент в наше время. Просто удостоверьтесь, что они используются правильно.
PHP задыхается из-за нехватки памяти. Вместо того, чтобы указывать curl для заполнения переменной PHP содержимым файла, используйте параметр
CURLOPT_FILE
для сохранения файла на диск.
//pseudo, untested code to give you the idea
$fp = fopen('path/to/save/file', 'w');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec ($ch);
curl_close ($ch);
fclose($fp);
Затем, когда файл будет сохранен, вместо использования файла
] или file_get_contents
(которые загружают весь файл в память, снова убивая PHP), используйте fopen
и fgets для чтения файла по одной строке за раз. .
Как сказано в других ответах:
CURLOPT_FILE
Но вы, возможно, не захотите действительно создать файл, который вы могли бы захотеть работать с данными в памяти ... Используя его, как только он «прибудет».
Одним из возможных решений может быть определение вашей собственной оболочки потока и использование этого вместо реального файла , с CURLOPT_FILE
Прежде всего, см .:
А теперь давайте рассмотрим пример.
Сначала , давайте создадим наш класс-оболочку потока:
class MyStream {
protected $buffer;
function stream_open($path, $mode, $options, &$opened_path) {
// Has to be declared, it seems...
return true;
}
public function stream_write($data) {
// Extract the lines ; on y tests, data was 8192 bytes long ; never more
$lines = explode("\n", $data);
// The buffer contains the end of the last line from previous time
// => Is goes at the beginning of the first line we are getting this time
$lines[0] = $this->buffer . $lines[0];
// And the last line os only partial
// => save it for next time, and remove it from the list this time
$nb_lines = count($lines);
$this->buffer = $lines[$nb_lines-1];
unset($lines[$nb_lines-1]);
// Here, do your work with the lines you have in the buffer
var_dump($lines);
echo '<hr />';
return strlen($data);
}
}
Что я делаю:
stream_write
Next , мы регистрируем эту оболочку потока, которая будет использоваться с псевдопротоколом "test":
// Register the wrapper
stream_wrapper_register("test", "MyStream")
or die("Failed to register protocol");
И теперь мы выполняем наш запрос curl, как и при записи в "настоящий" файл, как и другие предложенные ответы:
// Open the "file"
$fp = fopen("test://MyTestVariableInMemory", "r+");
// Configuration of curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.rue89.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 256);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FILE, $fp); // Data will be sent to our stream ;-)
curl_exec($ch);
curl_close($ch);
// Don't forget to close the "file" / stream
fclose($fp);
Обратите внимание, что мы работаем не с реальным файлом, а с нашим псевдопротоколом.
Таким образом, каждый раз, когда поступает порция данных, будет вызываться метод MyStream :: stream_write
, и сможет работать с небольшим объемом данных (когда я тестировал, у меня всегда было 8192 байта, какое бы значение я ни использовал для CURLOPT_BUFFERSIZE
)
Несколько примечаний:
Тем не менее, я надеюсь, что это поможет ;-)
Удачи!
Вы можете сохранить его во временный файл, а затем читать его по одной строке за раз, используя fgets
или fgetcsv
.
Таким образом вы избегаете начального большой массив, полученный при взрыве такой большой струны.
memory_limit
в php.ini
. fopen ()
и fgets ( )
. Спулируйте его в файл. Не пытайтесь сохранить все эти данные в памяти сразу.
NB:
«Обычно, если вы открываете файл с помощью fopen, закрываете его, а затем разрываете связь, он работает нормально. Но если между fopen и fclose вы передадите дескриптор файла для cURL, чтобы выполнить некоторую запись в файл, то разорвать связь не удастся. Почему это происходит, я не понимаю. Я думаю, что это может быть связана с ошибкой № 48676 "
http://bugs.php.net/bug.php?id=49517
Так что будьте осторожны, если вы используете старую версию PHP. На этой странице есть простое исправление, позволяющее дважды закрыть файловый ресурс:
fclose($fp);
if (is_resource($fp))
fclose($fp);