2010-07-25 121 views
1

我已经通过我的控制面板设置了一个cron作业。我已经通过我的FTP上传了该脚本,并将其权限设置为777(这样做是否安全?)&给出了此脚本在作业中的路径。现在该脚本使用依赖脚本来运行作业。混乱?这里是什么样子:PHP:尝试通过Cron作业运行脚本时出错

cron.php

<?php require("some_file1.php"); 
require("file1.php"); 
require("folder1/file1.php"); 
require("folder1/file2.php"); 
require("folder2/file1.php"); 

//This value is actually received from one of the require files above after come calculations 
$get_content = 'This is some value received after calculations.'; 

mail('Hi', '[email protected]', $get_content, 'Error'); 
?> 

我已选择接收cron任务的确认我的电子邮件&下面是我收到的错误:

mydomain.com/cron.php: line 1: syntax error near unexpected token `(' 
mydomain.com/cron.php: line 1: `<?php require("some_file1.php"); 
' 

我尝试与支持交谈,但他们不知道这个技术细节&目前技术人员不可用。如果有人能帮助我,这将是一件好事。

期待您的回复。

谢谢。

+0

'777'权限几乎*从不*安全。 – 2010-07-25 20:13:11

+0

您是否需要更改文件权限? – MrWhite 2010-07-25 20:32:21

+0

那我该如何设置它? 644授权拒绝错误。运行cron作业最安全的权限是什么? – Devner 2010-07-25 22:16:50

回答

0

我能够在网站技术支持的帮助下解决这个问题。这是解决方案,以防万一有人想知道。需要通过网站的控制面板(GUI)添加以下“运行命令”&。

/usr/local/php5/bin/php 

/home/username/mydomain.com/cron.php 

cron.php文件保持不变。

我想我将不得不接受我自己的答案,因为这是最相关的答案,它带有完美的解决方案。我仍然非常感谢你们的帮助&感谢所有的回应。

+0

你在那里看到的路径非常依赖于你的系统安装php的具体方式。一种方法使它更通用,所以你不需要去寻找变量,就是使用下面的,没有引号: “#!/ usr/bin/env php” 在路径中找到可执行文件,无论它在哪里(如果它在路径中)。 如果你想弄清楚你可以在shell中运行哪些东西,可以从shell中运行, 哪个php#=>/usr/local/php5/bin/php – 2010-07-26 00:02:21

+0

很高兴你解决了它并感谢你报告返回。所以,大概你最初试图直接使用CRON调用你的'cron.php'脚本而不调用PHP解释器?最终它知道PHP解释器的正确路径?您是否需要最终更改文件权限? – MrWhite 2010-07-26 00:09:27

+0

是的,你是对的路径是的,是的,我试图运行而不需要翻译。这是主要问题。是的,我确实将路径权限更改为777以使其运行。希望能帮助你。 – Devner 2010-07-26 00:37:34

7

我想,他们有不同的mod_php和命令行php的配置文件。 另一件事来检查 - 尝试解释字符串添加到PHP文件的顶部:

例如:

#!/usr/local/sbin/php 
+4

+1我认为缺少'#!/ usr/local/sbin/php'是个问题。请注意,您也可以通过将您的cron命令调用php并将该文件作为参数来解决此问题。最后,请注意,php二进制文件可能位于不同的位置,如'/ usr/bin/php'。 – grossvogel 2010-07-25 20:09:38

+1

感谢您的回复。下面是我添加的行时所得到的结果: 'sh:mydomain.com/cron.php:/ usr/local/sbin/php^M:错误的解释器:没有这样的文件或目录。我们可以做些什么来解决它? – Devner 2010-07-25 22:04:22

+0

第一:^ M看起来像一个不好的行尾字符(win \ r \ n而不是unix \ n)。将你的文本编辑器设置为使用unix行结束符,或使用'dos2unix'命令。如果这不能解决问题,那可能是因为你的php二进制文件存在于服务器的其他地方。如果您有shell访问权限,请使用'which php'来查找它。 – grossvogel 2010-07-25 22:26:06

1

尝试curl http://youdomain.com/path/script.php

尽管通常不推荐使用cURLWget来生成http请求,但可能会更容易。这样你就可以避免捕获php CLI二进制文件并包含路径。

0

如果您使用CRON(或至少正确的相对路径*),则需要在脚本中使用绝对路径。当您的脚本从命令行(即CRON)运行时,CWD是不同的。尽管如果你不提供任何路径,那么它应该使用include_path设置的任何值。

*您可以使用chdir()更改CWD。

此外,请尝试删除括号,即。

require "some_file1.php"; // brackets are not reqd - it's a language construct 
+0

我认为你仍然需要围绕你的代码的PHP标签'<?php'和'?>',如果这就是你的意思是“_removed顶部和底部的现有标签”? – MrWhite 2010-07-25 22:29:07

+0

你是对的标签..对不起,我误解你说的。我终于解决了它。我在下面发布解决方案作为评论。 – Devner 2010-07-25 23:44:19

0

你可以使用包括脚本:

$path = dirname(__FILE__); 
require($path."/"."file1.php"); 
... 

这应该可以解决相对路径问题。