我有一个php脚本,可以使用curl在sharepoint上上传文档。
如果我在终端中运行scipt,上传过程就可以正常工作。
由于我想在文件更改时自动调用脚本,所以我使用incron来检测相应文件夹中的更改并触发对php脚本的调用。
我的incron文件如下所示:
/var/www/[further path]/temp IN_MODIFY,IN_CREATE /usr/bin/php /var/www/[further path]/uploadToSharepoint.php
当我查看syslog时,可以看到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测试了它,但这也不起作用。它确实执行脚本并在不打印错误的情况下循环执行,但不上载文件。这可能与身份验证有关吗?
最佳答案
如果你说当你跑的时候一切正常
> php /var/www/[further path]/uploadToSharepoint.php
从命令行手动而不是通过incron,那么最有可能的问题是运行incrone命令的
user
选项1)尝试识别运行incrone命令的用户,然后切换到该用户并再次运行
php /var/www/[further path]/uploadToSharepoint.php
选项2)尝试chmod到0777您的扫描目录,然后使用incron再次测试