2016-12-10 1 views
0

У меня есть скрипт PHP, который должен запускаться каждые 15 минут на сервере (Ubuntu 16.04). Он отлично работает из командной строки или браузера, но не от cron. Проблема в том, что он не регистрирует и не удаляет файл.PHP нет разрешения на чтение или запись в файл при запуске cronjob

PHP скрипт:

<?php 

require ("cijfercheck_pass.php"); 
include ("postmessage.php"); 
include 'vendor/autoload.php'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://rapid.deltion.nl/user/login/'); 
curl_setopt($ch, CURLOPT_POSTFIELDS,'username='.urlencode($login_email).'&password='.urlencode($login_pass).'&login=Login'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/my_cookies.txt"); 
curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/my_cookies.txt"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3"); 
curl_setopt($ch, CURLOPT_REFERER, "https://rapid.deltion.nl/student/info/"); 
$page = curl_exec($ch); 

curl_setopt($ch, CURLOPT_URL,'https://rapid.deltion.nl/student/pdfresultaten/id/97041344/Luuk%20Wuijster.pdf'); 
curl_setopt($ch, CURLOPT_POSTFIELDS,'btnresultatenpdf='.urlencode('pdf resultaten')); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/my_cookies.txt"); 
$result = curl_exec($ch); 
curl_close($ch); 

$destination = dirname(__FILE__) . '/pdf/temp.pdf'; 
$file = fopen($destination, "w+"); 
fputs($file, $result); 
fclose($file); 

function logdata($body){ 
    $time = date("d-m-Y H:i:s"); 
    $file = 'cijfercheck.log'; 
    $current = file_get_contents($file); 
    $current .= "[${time}] ${body} \n"; 
    file_put_contents($file, $current); 
} 

if (file_exists('pdf/temp.pdf')) { 
    logdata("temp.pdf gedownload van rapid.deltion.nl"); 
} else { 
    logdata("ERROR: kon temp.pdf niet downloaden van rapid.deltion.nl"); 
    die(); 
} 

$parser = new \Smalot\PdfParser\Parser(); 
$pdf1 = $parser->parseFile('pdf/cijferlijst.pdf'); 
$pdf2 = $parser->parseFile('pdf/temp.pdf'); 

$string1 = $pdf1->getText(); 
$string2 = $pdf2->getText(); 

$nospace1 = str_replace(' ', '', $string1); 
$nospace2 = str_replace(' ', '', $string2); 

$arr1 = explode(':', $nospace1); 
$arr2 = explode(':', $nospace2); 

$check = $arr1[5]; 
$temp = $arr2[5]; 

if (!empty($temp) OR !empty($check)) { 
    logdata("pdf omgezet naar een array"); 
} else { 
    logdata("ERROR: was niet mogelijk om pdf om te zetten naar array"); 
    die(); 
} 

if($check == $temp){ 

    if(unlink('pdf/temp.pdf')){ 
     logdata("temp.pdf is verwijderd"); 
    } else { 
     logdata("ERROR: kon temp.pdf niet verwijderen"); 
     die(); 
    } 

} else { 
    if(unlink('pdf/cijferlijst.pdf') && rename('pdf/temp.pdf', 'pdf/cijferlijst.pdf')){ 
     logdata("cijferlijst.pdf is verwijderd en temp.pdf is hernoemt naar cijferlijst.pdf"); 
     PostToSlack(); 
    } else { 
     logdata("ERROR: kon cijferlijst.pdf niet verwijderen en/of kon temp.pdf niet hernoemen naar cijferlijst.pdf"); 
    } 

} 

Запись кронтаб:

0,15,30,45 * * * * php /var/www/html/slack/cijfercheck/cijfercheck.php 

Как это исправить?

+3

Учетная запись, работа CRON выполняется под должны также иметь persissions для доступа к соответствующим папкам/файлам. Помните, что не будет той же учетной записи, что ваш веб-сервер или ваш терминал работает под – RiggsFolly

+0

Я запускаю его как root, так значит ли это, что root не имеет достаточных разрешений? –

+0

В этом случае я могу только сказать: «Вы уверены, что он работает от имени root» – RiggsFolly

ответ

0
# Example of job definition: 
# .---------------- minute (0 - 59) 
# | .------------- hour (0 - 23) 
# | | .---------- day of month (1 - 31) 
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... 
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 
# | | | | | 
# * * * * * user-name command to be executed`enter code here 

это выглядит, как вы уже отсутствует имя пользователя, попробуйте:

*/15 * * * * root /usr/bin/php /var/www/html/slack/cijfercheck/cijfercheck.php 
+0

Спасибо за ваш ответ, но на самом деле это не проблема, я уже исправил это. Я забыл, что мне пришлось использовать абсолютные пути ...: / –

Смежные вопросы