如何解决PHP脚本的一部分不能在EXEC中运行?
| 我有一个在后台运行的PHP脚本,可将任何图片发布到他们的社交网站或通过电子邮件发送出去。所有数据都存储在数据库中,并且确实会调用它来像这样运行:$user_id = \"77\";
exec(\"/usr/bin/PHP5 upload_auto.PHP?user_id=$user_id\");
这是发布代码的样子:
<?PHP
$the_picture_id_to_check = $_GET[\'user_id\'];
MysqL_connect(\"localhost\",\"********\",\"********\") or die(MysqL_error());
MysqL_select_db(myflashp_pictures) or die (MysqL_error());
require_once(\'connect/twitter_files/twitteroauth/twitteroauth.PHP\');
require_once(\'connect/twitter_files/config.PHP\');
?>
<!--- Upload Tumblr --->
<?PHP
$result_tumblr = MysqL_query(\"SELECT * FROM upload_tumblr WHERE user_id=$the_picture_id_to_check\");
$num_rows_find = MysqL_num_rows($result_tumblr);
while($row_tumblr=MysqL_fetch_array($result_tumblr)){
// Get Username
$the_id = \"\".$row_tumblr[\'id\'].\"\";
$picture_id = \"\".$row_tumblr[\'picture_id\'].\"\";
$picture_url = \"\".$row_tumblr[\'picture_url\'].\"\";
$user_id = \"\".$row_tumblr[\'user_id\'].\"\";
$caption = \"\".$row_tumblr[\'caption\'].\"\";
$album_id = \"\".$row_tumblr[\'album_id\'].\"\";
// Authorization info
$monday_result = MysqL_query(\"SELECT * FROM photo_albums WHERE id=\'$album_id\'\");
$monday_query_row=MysqL_fetch_array($monday_result);
$tumblr_id = $monday_query_row[\'tumblr_id\'];
$monday_result2 = MysqL_query(\"SELECT * FROM connections_tumblr WHERE id=\'$tumblr_id\'\");
$monday_query_row2 = MysqL_fetch_array($monday_result2);
$tumblr_email = $monday_query_row2[\'email\'];
$tumblr_password = $monday_query_row2[\'password\'];
// Prepare POST request
$request_data = http_build_query(
array(
\'email\' => $tumblr_email,\'password\' => $tumblr_password,\'type\' => \'photo\',\'source\' => $picture_url,\'caption\' => $caption,\'generator\' => \'FlashPics iPhone App\'
)
);
// Send the POST request (with cURL)
$c = curl_init(\'http://www.tumblr.com/api/write\');
curl_setopt($c,CURLOPT_POST,true);
curl_setopt($c,CURLOPT_POSTFIELDS,$request_data);
curl_setopt($c,CURLOPT_RETURNTRANSFER,true);
$result = curl_exec($c);
$status = curl_getinfo($c,CURLINFO_HTTP_CODE);
curl_close($c);
// Check for success
if ($status == 201) {
MysqL_query(\"UPDATE pictures SET tumblr_id=\'$result\' WHERE id=\'$picture_id\'\");
echo \"Success! The new Tumblr post ID is $result.<br>\\n\";
MysqL_query(\"DELETE FROM upload_tumblr WHERE id=\'$the_id\'\");
} else if ($status == 403) {
echo \'Bad email or password for Tumblr.\';
} else if ($status == 400) {
echo \"Error ($status): $result\\n\";
MysqL_query(\"DELETE FROM upload_tumblr WHERE id=\'$the_id\'\");
} else {
echo \"Error ($status): $result\\n\";
}
}
if ($num_rows_find == 0) {
echo \"There\'s nothing to post to Tumblr.\";
}
?>
<br /><br />
<!--- Upload Email --->
<?PHP
include_once(\'class.PHPmailer.PHP\');
$result_email = MysqL_query(\"SELECT * FROM upload_email WHERE status=\'processing\' AND user_id=\'$the_picture_id_to_check\'\");
$num_rows_find = MysqL_num_rows($result_email);
MysqL_query(\"UPDATE upload_email SET status=\'$num_rows_find\' WHERE id=\'1\'\");
while($row_email=MysqL_fetch_array($result_email)){
// Get Username
$to = \"\".$row_email[\'email\'].\"\";
$get_info_result = MysqL_query(\"SELECT * FROM users WHERE id=\'\".$row_email[\'user_id\'].\"\'\");
$get_info_query_row = MysqL_fetch_array($get_info_result);
$get_username = $get_info_query_row[\'username\'];
$get_first_name = $get_info_query_row[\'first_name\'];
$get_last_name = $get_info_query_row[\'last_name\'];
$get_info_result = MysqL_query(\"SELECT * FROM pictures WHERE id=\'\".$row_email[\'picture_id\'].\"\'\");
$get_info_query_row = MysqL_fetch_array($get_info_result);
$get_caption = $get_info_query_row[\'caption\'];
$get_picture_url = $get_info_query_row[\'long_url\'];
$get_short_string = $get_info_query_row[\'short_string\'];
if ($get_caption == \"\") {
$get_caption = \"I have shared a FlashPic with you.\";
}
$mail = new PHPMailer();
$mail->From = \"share@myflashpics.com\";
$mail->FromName = \"FlashPics\";
$mail->Subject = \"$get_first_name $get_last_name has shared a FlashPic with you.\";
$mail->IsHTML(true);
$mail->Body = \"
<html><body style=\'margin: 0px; padding: 0px;\'>
<div style=\'padding: 15px; width: 480px; font-family: Helvetica; margin: 10px; border: 1px solid #d7d7d7;\'>
<div style=\'font-weight: bolder; font-size: 32px; margin: 8px 0px 20px 0px;\'><font color=\'#353535\'>Flash</font><font color=\'#f8bc49\'>Pics</font></div>
<div style=\'font-size: 20px; color: #353535; font-weight: normal; text-transform: lowercase;\'>$get_username</div>
<div style=\'margin-top: 15px; font-size: 14px; line-height: 18px;\'>$get_caption<br>
<br>
<img src=$get_picture_url width=\'480\'>
<br><br>
<a href=\'http://myflashpics.com/picture/$get_short_string\' style=\'color: #000000; text-decoration: underline;\'>view full size image</a><br>
<br>
Sincerely,<br>
The FlashPics Team</div>
</div>
</body></html>\";
$mail->AltBody = \"$get_username
$get_caption
http://myflashpics.com/picture/\".$row_email[\'picture_id\'].\"
Yours Truly,The FlashPics Team\";
$the_id = \"\".$row_email[\'id\'].\"\";
$pieces = explode(\",\",\"$to\");
$one = $pieces[\'0\'];
$two = $pieces[\'1\'];
$three = $pieces[\'2\'];
$four = $pieces[\'3\'];
$five = $pieces[\'4\'];
if ($one != \"\") {
$mail->AddBCC(\"$one\");
}
if ($two != \"\") {
$mail->AddBCC(\"$two\");
}
if ($three != \"\") {
$mail->AddBCC(\"$three\");
}
if ($four != \"\") {
$mail->AddBCC(\"$four\");
}
if ($five != \"\") {
$mail->AddBCC(\"$five\");
}
if(!$mail->Send()) {
echo \"Failed sending email to <b> $one,$two,$three,$four,$five</b>.\" . $mail->ErrorInfo;
MysqL_query(\"UPDATE upload_email SET status=\'error\' WHERE id=\'$the_id\'\");
} else {
echo \"Sent email to <b> \".$row_email[\'email\'].\"</b> successfully.<br>\";
MysqL_query(\"UPDATE upload_email SET status=\'sent\' WHERE id=\'$the_id\'\");
}
}
if ($num_rows_find == 0) {
echo \"There are no pictures to email out.\";
}
?>
我的问题是我可以从浏览器中正常运行它,但是如果通过PHP exec运行它,则什么也没有发生。另一个令人困惑的部分是某些操作正在起作用(例如Facebook和Twitter)。
提前致谢,
库尔顿
解决方法
尝试改用
CURL
:
exec(\"curl http://www.mydomain.com/upload_auto.php?user_id=$user_id\");
我发现从命令行运行PHP有时会带来意想不到的结果。 CURL
将像浏览器一样运行它。
,我有一个类似的问题,其中exec()或shell_exec()都不在我的一个脚本上工作。
我最终使用了system()
尝试
system(\"/usr/bin/php5 upload_auto.php?user_id=$user_id /dev/null 2>&1\");
,编写类,其中将包含upload_auto.php的主要代码。并且调用此类的方法,而不是使用\“ exec \”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。