2010-04-13 71 views
1

我有一個名爲send.email.php的頁面,它發送一封電子郵件 - 非常簡單的東西 - 我傳遞一個訂單ID,它創建作業請求並將其發送出去。這在我開發的上下文中使用時很好(使用javascript對URL進行AJAX調用並將order_id作爲查詢參數傳遞)

我現在試圖在另一個應用程序中重複使用完全相同的頁面,但是我我使用php file_get_contents($ base_url.'admin/send.email.php?order_id ='。$ order_id)來調用它。當我以這種方式調用頁面時,$ _SESSION數組是空的isempty()= 1。

這是因爲我使用file_get_contents啓動一個新會話,並且存儲在$ _SESSION中的值在登錄時不可用我在那裏?

- >感謝您的反饋。這是有道理的,新的呼叫沒有訪問現有會話...

雖然新的問題:

我現在得到:未能打開流:HTTP請求失敗!當試圖執行:

$opts = array('http' => array('header'=> 'Cookie: ' . $_SERVER['HTTP_COOKIE']."\r\n")); 
$context = stream_context_create($opts); 
$contents = file_get_contents($base_url.'admin/send.sms.php?order_id='.order_id, false, $context); 

然而,URL工作正常,如果我叫它爲:(它只是沒有讓我訪問會話)

$result file_get_contents($base_url.'admin/send.sms.php?order_id='.$order_id); 
+0

這個'base_url.'admin/send.sms.php'是否與您正在使用的腳本在同一臺服務器上? – VolkerK 2010-04-13 11:08:31

回答

1

file_get_contents()不應該在任何需要傳輸認證/會話信息的地方使用。它不會發送任何cookie,所以用戶的認證信息將不會被默認包含。

您可以通過在URL中包含會話標識符(例如,默認爲「PHPSESSID」)作爲查詢參數來解決該問題,並讓其他腳本檢查該問題。但是,在URL中傳輸會話標識符是非常糟糕的做法,即使它只是針對同一臺服務器。

$contents = file_get_contents("http://.... /send_sms.php?order_id=$order_id&" . session_name() . '=' . session_id()); 

要做到這一點正確,使用CURL並建立一個完整的HTTP請求,其中包括父頁面的cookie信息。

+0

感謝您的反饋>我要看看重寫代碼,以適應兩個調用...我已經發布了一個新的問題,要求指導構建文件,幷包括:http://stackoverflow.com/questions/2635332/best-way-to-program-a-call-to-php – sjw 2010-04-14 06:58:52

0

你必須包含的文件或者撥打send.sms.php腳本中的相應功能。而不是你稱之爲web服務(它不是)

+0

所以你說這樣做是不可能的?該PHP不能做到這一點? – sjw 2010-04-13 07:22:05

+1

@髮型師,一切皆有可能。但它也必須是明智的。爲什麼不製作一個功能,然後將它包含在兩個腳本中?通過HTTP進行包含通常是糟糕的設計。 – 2010-04-13 08:04:50

+0

這是可能的,但這是非常糟糕的做法 – knittl 2010-04-13 08:09:09