Автор Тема: PHP & Cron & пути  (Прочитано 6581 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн KhasDenis

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 49
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
PHP & Cron & пути
« : 17 Декабря 2003, 11:58:25 »
скрипт выполняет следующие действия,
подключает файл с настройками базы - include(...),
записывает данные в базу,
записывает логи в файл - fopen(), fwrite(),
и удаляет файлы - unlink() ...

через браузер работает прекрасно ....
когда его запускает крон, на почте имеет следующие ошибки

Warning: main(../../includes/connection.php): failed to open stream: No such file or directory in /var/www/html/.... /purge_ads.php on line 1

Warning: main(): Failed opening \'../../includes/connection.php\' for inclusion (include_path=\'.:/usr/local/php/share/pear\') in /var/www/html/....../purge_ads.php on line 1

Warning: unlink(../../upload_classifieds/admin155.jpg): No such file or directory in /var/www/html/...../purge_ads.php on line 33

при этом значения в базе есть (комментирую include и прописываю настройки для коннекта в самом скрипте), а логов в файле нет.
 
никак не хочет скрипт в файл писать (файл -777) и с путями разобраться не может, но это только в случае когда кроном запускается.

ps. где находится search и гугл знаю.
-------------------------------------------------------
пост выкинули в офтопик на phpclub.net, и толком не обьяснили почему.... надеюсь если здесь его ждет таже участь, мне хотябы обьяснят почему ...

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
PHP & Cron & пути
« Ответ #1 : 17 Декабря 2003, 12:36:16 »
ща тоже выкинем
man cron
man crontab
AS IS...

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
PHP & Cron & пути
« Ответ #2 : 17 Декабря 2003, 13:03:54 »
какой кошмар...
какое фатальное непонимание, что такое диск, а что - веб-сервер.

отлаживай свою программу.
вмесо этих ошибок хоть бы вывел, к примеру, getcwd()
чтобы понять, откуда у тебя эти точечки с палочками начинают отсчитываться.

или уж, на худой конец, пропиши пути абсолютные.
введи в начале скрипта переменную с абсолютным путем - и подставляй.

Оффлайн KhasDenis

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 49
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
PHP & Cron & пути
« Ответ #3 : 17 Декабря 2003, 13:09:58 »
ты серьезно думаешь что мне легче по форумам бродить, чем пару абзацев мана прочесть ? С абсолютными путями все заработало, но в мане и слова нет про пути. Хотя может ман и меняется от дистрибутива к дистрибутиву ... незнаю. Это обычная практика использовать абсолютные пути в скриптах которые крон запускать будет ? не может быть.

Оффлайн KhasDenis

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 49
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
PHP & Cron & пути
« Ответ #4 : 17 Декабря 2003, 13:25:25 »
Romik, спасибо большое за getcwd()

да для крона корень это папка пользователя .... я редактирую кронтаб для рута, значит у меня /root
>> фатальное непонимание, что такое диск, а что - веб-сервер
этого нет ... ты не прав....
как я понял крон берет скрипт который прописан в кронтаб и "тащит" его к "своему пользователю" в папку выполняет и удаляет.Страшная картина но как это еще обьяснить.
>>чтобы понять, откуда у тебя эти точечки с палочками начинают >>отсчитываться.

Точечки начинаются с того места где сейчас находиться файл. Как еще может быть по другому то?

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
PHP & Cron & пути
« Ответ #5 : 17 Декабря 2003, 13:27:02 »
man 5 crontab:
Цитировать
The ``sixth\'\' field (the rest of the line) specifies the command to be
     run.  The entire command portion of the line, up to a newline or % char-
     acter, will be executed by /bin/sh or by the shell specified in the SHELL
     variable of the cronfile.  Percent-signs (%) in the command, unless
     escaped with backslash (\\), will be changed into newline characters, and
     all data after the first % will be sent to the command as standard input.
ты вообще про специфику запуска исполняемых файлов (скриптов) в unix-like системах в курсе?
AS IS...

Оффлайн KhasDenis

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 49
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
PHP & Cron & пути
« Ответ #6 : 17 Декабря 2003, 13:41:42 »
will be executed by /bin/sh or by the shell specified in the SHELL
variable of the cronfile
Цитировать


наверно ты об этом ... где почитать про специфику запуска. При этом что, местонахождения файла меняется ? значит действительно не в курсе :( извиняйте

Оффлайн KhasDenis

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 49
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
PHP & Cron & пути
« Ответ #7 : 17 Декабря 2003, 15:14:26 »
забыл написать ....
10 * * * * /usr/local/php/bin/php /var/www/html/Harley/admin/crons/purge_ads.php

это мой кронтаб

Оффлайн KhasDenis

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 49
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
PHP & Cron & пути
« Ответ #8 : 17 Декабря 2003, 15:26:32 »
2Romik
Цитировать

какое фатальное непонимание, что такое диск, а что - веб-сервер.

обьясни подробней в чем оно заключается

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
PHP & Cron & пути
« Ответ #9 : 18 Декабря 2003, 13:58:33 »
KhasDenis
Вместо относительных путей ("../../some_folder")
используй абсолютные: ("/var/www/html/some_folder");
или
в начале скрипта сделай вот что:

chdir
("абсолютный_путь_к_каталогу_где_находиться_скрипт");
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн KhasDenis

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 49
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
PHP & Cron & пути
« Ответ #10 : 18 Декабря 2003, 17:34:59 »
спасибо, так и делаю ...
просто интересно почему getcwd()
дает /var/www/html/some_folder .... когда запускаю скрипт из браузера ....
и /root  - когда кроном ????
ведь скрипт как лежал в some_folder так и лежит ....
видно действительно что то я фатально не понимаю :(

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
PHP & Cron & пути
« Ответ #11 : 18 Декабря 2003, 18:49:38 »
ты не понимаешь понятие текущего каталога.

допустим, у тебя в с:/tools/ есть команда ls.com
которая выводит список файлов.

ты идешь в командную строку, переходишь на диск d:, в каталог games

Следуя твоей логике, команда c:/tools/ls должна выводить списо файлов в c:/tools/ ?
Ты хорошо подумал?

Оффлайн KhasDenis

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 49
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
PHP & Cron & пути
« Ответ #12 : 18 Декабря 2003, 19:25:54 »
по моей логике это зависит от команды - программы ...
как она написана если она написана так, чтобы выводить список файлов текущей-активной директории то она выведет список файлов D:\\games .... если она написана чтобы выводить список из
C:\\tools то она и будет его выводить где бы ты не находился сейчас.

разве это не логично ?

когда я работаю с системой через оболочку - то все ясно, я передвигаюсь по фолдерам, т.е. меняю активный -текущий каталог,
которому и будут соответствовать точечки.
в случае же веб сервера точечки совпадут с исходным php файлом,
т.е. сервер в поисках файла "выравняет" активную директорию и директорию в которой файл лежит.

теперь все понял, спасибо

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28