我有一個重定向一個img src屬性一個PHP頁面nginx的重寫規則。在這個php頁面中,我試圖做一個GET請求,它在成功時向同一個頁面發出POST請求,並將GET請求返回的數據作爲數據發送。爲什麼PHP腳本中的$ _POST數據爲空?如果我在PHP腳本中對$name = "http://path/to/my/img.png"
進行了硬編碼,則圖像正確呈現。
<?php
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);
var_dump($_REQUEST);
//if(isset($_POST['val'])) {
// open the file in a binary mode
$name = $_POST['val']; // ALWAYS EMPTY
$fp = fopen($name, 'rb');
// send the right headers
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
// dump the picture and stop the script
//echo fpassthru($fp);
header("Location: $name");
exit;
//}
?>
<html>
<head>
<script type='text/javascript' src='/steal/steal.js'></script>
<script type="text/javascript" src="/plugins/jquery/json2.js"></script>
<script type="text/javascript">
steal('jquery/dom/fixture').then(function(){
$.fixture("GET /event/{code}", function(original, settings, headers){
return [200, "success", { "img_url":"http://path/to/my/img.png" }, {} ]
})
var strObj = <?php echo json_encode($_REQUEST); ?>;
var str = strObj.q;
var eventCode = str.split('/')[1];
$.ajax({
url: "/event/"+eventCode,
success: function(data) {
var imgUrl = data.img_url
$.ajax({
type: 'POST',
contentType: 'json',
data: {val:imgUrl},
success: function(data){
console.log(data);
},
error: function(jqXHR, textStatus, errorThrown){
console.log(textStatus);
}
});
}
});
});
</script>
</head>
<body>
</body>
</html>
好起來。你正在嘗試將圖像點的src指向這個php頁面,在你正在輸出javascript的頁面(據稱用戶瀏覽器運行)中,然後將POST請求發送到與它們相同的url剛剛進入GET? – castis
這是用於電子郵件跟蹤。基本上,用戶將收到一封電子郵件,並在打開該電子郵件時,img src屬性向uri發出請求,然後將其重寫爲php腳本。 php腳本接收$ _REQUEST數據 - 包含與用戶綁定的一些id,使用該id發出GET請求,成功時返回一個url。從這裏開始,url被用作POST請求的數據到相同的php頁面,在那裏它將被base64編碼並作爲img src屬性返回。這聽起來也很複雜,所以我願意提供建議。 – neridaj