Skrypt php wykonany przez przeglądarkę i przez zadanie cron

0

Witam

mam skrypt który losuje plik i kopiuje go w odpowiednie miejsce

gdy skrypt ma postać

 $file_img_r1=glob("../front/slick/img/base/*.jpg");

uruchomienie go poprzez przeglądarkę powoduje wykonanie instrukcji glob,
ale uruchomienie go przez crona zwraca pustą tablicę.

Żeby zadziałało przez crona, muszę zmienić glob'a na

$images = dirname(dirname(__FILE__))."/front/slick/img/base/*.jpg";
$file_img_r1=glob($images);

Coś jest nie tak na serwerze, że glob (copy zresztą też) wykłada się na '..' i nie potrafi wejśc w katalog wyżej?

4

Moze working directory jest zwyczajnie inne (a Ty operujesz na sciezkach wzglednych)

https://www.php.net/manual/en/function.getcwd.php

3

Tylko taka jedna ważna uwaga. Może wyjdzie, że się czepiam, a Ty doskonale wiesz o co chodzi, niemniej Twój wpis może być mylący dla innych - stąd sprostowanie.

PHP nie jest odpalany w przeglądarce, więc zdanie uruchomienie go poprzez przeglądarkę jest trochę dwuznaczne. Rozumiem o co chodzi - masz na myśli sytuację, w której odpalasz podany link w przeglądarce, a przez to skrypt zostanie uruchomiony. Niemniej to nie przeglądarka go wykonuje, przeglądarka nie ma zielonego pojęcia co tam się dzieje. W dużym uproszczeniu - to serwer WWW, po otrzymaniu takiego żądania od przeglądarki, odpala PHP, wykonuje skrypt oraz zwraca wynik.

Dlaczego to działa odpalone "przez przeglądarkę", ale nie jako CRON? Na szybko przychodzą mi do głowy 2 opcje:

1) jak napisał powyżej @stivens, może jest to odpalane z innej lokalizacji/jakiś problem ze ścieżkami

2) pamiętaj, że żeby coś się uruchomiło, ktoś/coś musi to uruchomienie wywołać. W przypadku odpalania przez serwer WWW, całość jest uruchamiana z prawami użytkownika powiązanego z serwerem WWW, natomiast CRON działa na innych uprawnieniach. Być może to kwestia praw dostępu do plików, może CRON nie może czegoś odczytać/zapisać, bo dostęp do danych plików/skryptów/folderów jest przydzielony dla użytkownika WWW

1

Chyba rzeczywiście się czepiasz, bo miałbyś rację gdybym napisał że skrypt został wykonany przez albo uruchomiony w przeglądarce. Napisałem że został "uruchomiony przez" (nie odpalony, nie wiem czemu tak napisałeś), czyli przeglądarka zażądała od serwera wyników tego konkretnego skryptu, de facto, to ona zainicjowała uruchomienie go na serwerze, który go wykonał.

Co do meritum, stivens ma rację, wina jest po stronie working directory.
Szczerze, to nie przypuszczałem że wywołując skrypt w cronie ze ścieżką "/home/user/domains/strona.pl/public_html/album/cron/test4.php", working directory będzie "/home/user", a nie miejsce występowania pliku.
Może to tylko DA tak ma, bo przez niego ustawiam zadania crona, nie wiem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1