Manipulation de chaînes dépassant les limites de mémoire
Lors de la manipulation de chaînes trop volumineuses, comme dans le cas d'un fichier CSV de 30 millions de caractères, des erreurs d'allocation de mémoire se produisent peut survenir. Pour résoudre ce problème, évitez de charger la chaîne entière en mémoire. Utilisez plutôt des stratégies alternatives pour traiter les données sans dépasser les limites de mémoire.
Approches alternatives :
Exemple de mise en œuvre à l'aide de Stream Wrapper :
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) { $lines = explode("\n", $data); $lines[0] = $this->buffer . $lines[0]; $nb_lines = count($lines); $this->buffer = $lines[$nb_lines-1]; unset($lines[$nb_lines-1]); var_dump($lines); // Process data as needed echo '<hr />'; return strlen($data); } } // Register custom stream stream_wrapper_register("test", "MyStream"); // Configure curl with target "file" $fp = fopen("test://MyTestVariableInMemory", "r+"); curl_setopt($ch, CURLOPT_FILE, $fp); // Data will be sent directly to stream curl_exec($ch); curl_close($ch); // Don't forget to close file / stream fclose($fp);
Cette stratégie vous permet de traiter les données progressivement au fur et à mesure de leur arrivée, évitant ainsi les problèmes d'allocation de mémoire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!