Message: Return type of CI_Session_files_driver::open($save_path, $name) should either be compatible with SessionHandlerInterface::open(string $path, string $name): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
Message: Return type of CI_Session_files_driver::close() should either be compatible with SessionHandlerInterface::close(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
Message: Return type of CI_Session_files_driver::read($session_id) should either be compatible with SessionHandlerInterface::read(string $id): string|false, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
Message: Return type of CI_Session_files_driver::write($session_id, $session_data) should either be compatible with SessionHandlerInterface::write(string $id, string $data): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
Message: Return type of CI_Session_files_driver::destroy($session_id) should either be compatible with SessionHandlerInterface::destroy(string $id): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
Message: Return type of CI_Session_files_driver::gc($maxlifetime) should either be compatible with SessionHandlerInterface::gc(int $max_lifetime): int|false, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
Pierwszym moim wpisem na blogu będzie rozwiązanie problemu z zapisem do zmiennej obrazu. Oczywiście problemu jest banalny jak mamy gotowy plik ze zdjęciem zapisany na dysku. Wystarczy użyć funkcji file_get_contents i po sprawie ale co w przypadku gdy obrazek został chwilę wcześniej wygenerowany np. za pomocą imagecreate. Taką sytuację postaram się poniżej wyjaśnić.
Na wstępie wspomnę że oczywiście można wygenerować obrazek zapisać na dysk a następnie pobrać ale to rozwiązanie nie każdemu będzie odpowiadać. Osobiście z opisywaną sytuacją spotkałem się podczas generowania plików PDF z wygenerowanym obrazkiem. Obrazek sam w sobie był nie potrzeby dlatego zapisywanie go na dysku byłoby niepotrzebną operacja ponadto po pewnym czasie trzeba by go usunąć żeby zwolnić niepotrzebnie zużyte miejsce.
Dobrze a więc do rzeczy, tworzymy sobie przykładowy obrazek i wypełniamy kolorem.
Następnie aby utworzyć z niego plik JPG trzeba użyć funkcji imagejpeg ale za jej pomocą możemy jedynie wygenerować plik lub wysłać obrazek do przeglądarki.
Tutaj z pomocą przychodzi ob_start czyli włączenie bufora danych wyjściowych. W efekcie od tego momentu żadne dane nie są wysyłane tylko będą przechowywane w buforze.
Wystarczy więc użyć imagejpeg tak jakbyśmy chcieli wysłać obrazek do przeglądarki a następnie użyć ob_get_contents aby zapisać zawartość bufora do zmiennej. Ostatnią operacją jest zamknięcie i wyczyszczenie bufora ob_end_clean i już możemy korzystać z obrazka.
Cały kod powyższego przykładu wygląda następująco: