我有一個PHP腳本,使用cURL上傳Sharepoint上的文檔。 如果我在終端中運行scipt,上傳過程可以正常工作。PHP腳本上傳文件在終端中工作,但不是與incron自動呼叫
因爲我想在文件更改時自動調用腳本,我使用incron來檢測相應文件夾中的更改並觸發PHP腳本的調用。
我incron文件如下所示:
/var/www/[further path]/temp IN_MODIFY,IN_CREATE /usr/bin/php /var/www/[further path]/uploadToSharepoint.php
當我看看系統日誌,我可以看到腳本調用已被incron正確地觸發。但由於某些原因,該文件未上傳到Sharepoint。 我也嘗試使用全局寫入權限創建文件,但這並沒有解決我的問題。
-rwxrwxrwx 1 www-data www-data 49058 Mär 3 10:28 [file].xlsx
這裏是我的劇本我打電話:
包括 'database.php中';
$username="[username]";
$password="[password]";
$localFileURL="/var/www/[further path]/temp/";
$files = scandir($localFileURL, 1);
$newest_file = $files[0];
$pathToUpload=getTeamPath($newest_file);
uploadDocument($pathToUpload . '/' . $newest_file, $localFileURL . $newest_file,$username, $password);
function uploadDocument($dest, $localFile,$username, $password){
$fp = fopen($localFile, 'r');
// Connecting to website.
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);
curl_setopt($ch, CURLOPT_URL, $dest);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 86400); // 1 Day Timeout
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 128);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localFile));
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_exec ($ch);
if (curl_errno($ch)) {
$msg = curl_error($ch);
}
else {
$msg = 'File uploaded successfully.';
}
curl_close ($ch);
}
我真的很感激任何幫助!
編輯: 我也測試它與一個正常的crontab現在,這也不起作用。它確實執行腳本並循環遍歷它而不打印錯誤,但不上載文件。是否有可能與認證有關?
當我遇到cron腳本沒有運行的問題時,第一個嫌疑人總是文件許可,但你似乎完全知道這個問題。第二個嫌疑人可以是shell環境變量。我會嘗試將PHP的'$ _ENV'變量轉儲到可讀的地方並檢查其內容。 –
如果您還沒有嘗試過,請嘗試將您的腳本STDOUT和STDERR路由到cron調用中的文件,並查看它告訴您的內容! –
感謝您的意見。 在incron中添加「> /var/www/[folder]/Log.log 2>&1」給我的命令不會給出任何輸出 或者我做錯了嗎? – user2550641