Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Cron nie uploaduje obrazków
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy portalowe i CMS'y
marcin909090
Witam, puszczam zadanie CRON importu produktów. Dane pobierane są z bazy danych w pętli. Każdy przedmiot ma swój obrazek, a w bazie danych jest tylko informacja pod jakim linkiem się znajduje.
Mam taki kod. Podczas puszczenia skryptu ręcznie produkty dodają się prawidłowo. Podczas podpięcia skryptu do cron'a zostaje dodany opis produktu i skrypt zatrzymuje swoje działanie. Do folderu uploads w WP, nie zostaje nic wrzucone (w przypadku ręcznego odpalenia skryptu, do foledru są uploadowane zdjęcie z linku).

Mój kod do uploadu i wczytania obrazków. (Gdy usunę tą część kodu cron działa i produkty są importowane prawidłowo)
  1. $thumb_url = $foto1;
  2.  
  3. $tmp = download_url( $thumb_url );
  4.  
  5. preg_match('/[^\?]+\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/', $thumb_url, $matches);
  6. $file_array['name'] = basename($matches[0]);
  7. $file_array['tmp_name'] = $tmp;
  8.  
  9. $thumbid = media_handle_sideload( $file_array, $new_post_id, 'gallery desc' );
  10.  
  11. set_post_thumbnail($new_post_id, $thumbid);
  12.  
  13. $thumb_url2 = $foto2;
  14.  
  15. $tmp2 = download_url( $thumb_url2 );
  16.  
  17. preg_match('/[^\?]+\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/', $thumb_url2, $matches);
  18.  
  19. $file_array2['name'] = basename($matches[0]);
  20. $file_array2['tmp_name'] = $tmp2;
  21. $imgID = media_handle_sideload( $file_array2, $new_post_id, 'desc' );
  22.  
  23. update_post_meta( $new_post_id, '_product_image_gallery', $imgID);


Siędzę nad tym ponad 2 dni. Problem z prawami dostępu do zapisu ? Błędny kod? Co może być przyczyną ?
session
Na początek zrób sobie error log:
  1. ini_set("log_errors", 1);
  2. ini_set("error_log", "errors.log");


Sprawdź, czy masz jakieś błędy w pliku errors.log
Pyton_000
pokaż wpis z crona / skrypt który odpala ten import.

Może jest problem ze ścieżkami. W sensie że jak cron odpala skrypt z

php /var/www/vhosts/domena/skrypt.php

a ręcznie robisz to w katalogu gdzie masz skrypt.
W takim wypadku zrób najpierw cd do tego katalogu, a potem polecenie odpalenia.


W ostateczności zrób endpoint do odpalenia go przez WWW i wtedy przez CURL odpalaj.
marcin909090
Wygrałem bitwę z cronem medieval.gif
Debugowałem wszystko krok po korku poniższym sposobem z zapisem do pliku oraz tym co podał session.
  1. $logtxt="początek dodawania foto :\n";
  2. $fh2 = fopen($insertLog, 'a');
  3. fwrite($fh2, $logtxt);
  4. fclose($fh2);

Problem ze ścieżkami jak napisał pyton już zaczął występować w debugowaniu.
Error log bez dodatkowej ścieżki dla skryptu uruchamianego ręcznie znajduje się w katalogu wp-admin.
Error log dla skryptu uruchamianego w cronie znajduje się katalog wyżej.
Z jednego polecenia powstawały mi dwa pliki o innych ścieżkach.

Problemem okazała się funkcja :
  1. media_handle_sideload( $file_array, $new_post_id, 'gallery desc' );

Rozwiązanie to dodanie przed funkcją :
  1. require_once(ABSPATH . "wp-admin" . '/includes/image.php');
  2. require_once(ABSPATH . "wp-admin" . '/includes/file.php');
  3. require_once(ABSPATH . "wp-admin" . '/includes/media.php');

Opis funkcji :
https://codex.wordpress.org/Function_Refere...handle_sideload

Problem rozwiązany smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.