2011-04-15 67 views
0

我有一個在後臺運行的PHP腳本,可以將任何圖片發佈到他們的社交網站或通過電子郵件發送出去。所有數據都存儲在數據庫中,它被調用這樣運行:PHP腳本的一部分不能在EXEC中運行?

$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  = "[email protected]"; 
$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)。

由於提前,
庫爾頓

回答

1

嘗試使用CURL代替:

exec("curl http://www.mydomain.com/upload_auto.php?user_id=$user_id"); 

我發現,在命令行運行PHP有時會帶來意想不到的效果。 CURL將像瀏覽器一樣運行它。

+0

這也沒有工作:( – iosfreak 2011-04-15 23:09:47

+0

好吧,試着直接從命令行運行命令(如果你有shell訪問)或者添加輸出變量來檢查發生了什麼:'exec($ cmd,$ output,$返回);'然後'print_r($ return)' – Kit 2011-04-15 23:12:00

+0

只是在開玩笑,這個工作!錯誤的網址張貼到。非常感謝! – iosfreak 2011-04-16 00:37:52

0

我既沒有執行exec()或了shell_exec()在我的腳本的一個工作了類似的問題。

我結束了使用系統()

嘗試 system("/usr/bin/php5 upload_auto.php?user_id=$user_id /dev/null 2>&1");

+0

仍然沒有工作...任何其他的想法? – iosfreak 2011-04-15 23:06:02

0

寫入類,其中將包含upload_auto.php的主要代碼。並且調用這個類的方法,而不是使用「exec」。

+0

發佈所有社交網站需要太長的時間...用戶不想等待... – iosfreak 2011-04-15 23:45:38