Forum Webscript.Ru
Программирование => PHP => Тема начата: KhasDenis от 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, и толком не обьяснили почему.... надеюсь если здесь его ждет таже участь, мне хотябы обьяснят почему ...
-
ща тоже выкинем
man cron
man crontab
-
какой кошмар...
какое фатальное непонимание, что такое диск, а что - веб-сервер.
отлаживай свою программу.
вмесо этих ошибок хоть бы вывел, к примеру, getcwd()
чтобы понять, откуда у тебя эти точечки с палочками начинают отсчитываться.
или уж, на худой конец, пропиши пути абсолютные.
введи в начале скрипта переменную с абсолютным путем - и подставляй.
-
ты серьезно думаешь что мне легче по форумам бродить, чем пару абзацев мана прочесть ? С абсолютными путями все заработало, но в мане и слова нет про пути. Хотя может ман и меняется от дистрибутива к дистрибутиву ... незнаю. Это обычная практика использовать абсолютные пути в скриптах которые крон запускать будет ? не может быть.
-
Romik, спасибо большое за getcwd()
да для крона корень это папка пользователя .... я редактирую кронтаб для рута, значит у меня /root
>> фатальное непонимание, что такое диск, а что - веб-сервер
этого нет ... ты не прав....
как я понял крон берет скрипт который прописан в кронтаб и "тащит" его к "своему пользователю" в папку выполняет и удаляет.Страшная картина но как это еще обьяснить.
>>чтобы понять, откуда у тебя эти точечки с палочками начинают >>отсчитываться.
Точечки начинаются с того места где сейчас находиться файл. Как еще может быть по другому то?
-
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 системах в курсе?
-
will be executed by /bin/sh or by the shell specified in the SHELL
variable of the cronfile
наверно ты об этом ... где почитать про специфику запуска. При этом что, местонахождения файла меняется ? значит действительно не в курсе :( извиняйте
-
забыл написать ....
10 * * * * /usr/local/php/bin/php /var/www/html/Harley/admin/crons/purge_ads.php
это мой кронтаб
-
2Romik
какое фатальное непонимание, что такое диск, а что - веб-сервер.
обьясни подробней в чем оно заключается
-
KhasDenis
Вместо относительных путей ("../../some_folder")
используй абсолютные: ("/var/www/html/some_folder");
или
в начале скрипта сделай вот что:
chdir("абсолютный_путь_к_каталогу_где_находиться_скрипт");
-
спасибо, так и делаю ...
просто интересно почему getcwd()
дает /var/www/html/some_folder .... когда запускаю скрипт из браузера ....
и /root - когда кроном ????
ведь скрипт как лежал в some_folder так и лежит ....
видно действительно что то я фатально не понимаю :(
-
ты не понимаешь понятие текущего каталога.
допустим, у тебя в с:/tools/ есть команда ls.com
которая выводит список файлов.
ты идешь в командную строку, переходишь на диск d:, в каталог games
Следуя твоей логике, команда c:/tools/ls должна выводить списо файлов в c:/tools/ ?
Ты хорошо подумал?
-
по моей логике это зависит от команды - программы ...
как она написана если она написана так, чтобы выводить список файлов текущей-активной директории то она выведет список файлов D:\\games .... если она написана чтобы выводить список из
C:\\tools то она и будет его выводить где бы ты не находился сейчас.
разве это не логично ?
когда я работаю с системой через оболочку - то все ясно, я передвигаюсь по фолдерам, т.е. меняю активный -текущий каталог,
которому и будут соответствовать точечки.
в случае же веб сервера точечки совпадут с исходным php файлом,
т.е. сервер в поисках файла "выравняет" активную директорию и директорию в которой файл лежит.
теперь все понял, спасибо