微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP脚本的一部分不能在EXEC中运行?

如何解决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 举报,一经查实,本站将立刻删除。