Я работаю над проектом, где я выполнил пару графиков/диаграмм, используя библиотеку PHP Rgraph. В моем script для графиков я делаю следующее:
- Вычислите точки графа и нарисуйте график, используя метод Rgraph
Draw()
. - Создайте переменную данных изображения с помощью метода
canvas.toDataURL()
. - Передайте эту переменную данных изображения на сервер с помощью метода jQuery AJAX
$.post()
. - Сохраните изображение на сервере с помощью PHP script.
Все в этом решении отлично работает на моем локальном хосте, однако на сервере разработки запрос AJAX, который передает данные изображения, возвращает 403 Error
.
Я зарегистрировал данные как на стороне клиента, так и на стороне сервера, чтобы определить проблему. Ведение журнала на стороне клиента подтверждает, что передаваемая переменная imageData выглядит правильно. Однако ведение журнала на стороне сервера подтверждает, что передаваемая переменная imageDatastrong > является причиной этой проблемы.
В прошлом году был опубликован очень похожий вопрос об этом, однако они не смогли определить основную причину этого. Может ли кто-нибудь помочь мне в правильном направлении разрешить это?
Я думаю, что это возможная проблема кодирования данных, но если это так, почему это работает на одном сервере, а не на другом?
Мой соответствующий Javascript:
radar.Set('chart.contextmenu', [
['Get PNG', RGraph.showPNG],
null,
['Cancel', function () {}]
]);
radar.Draw();
var imageData = radar.canvas.toDataURL("image/png");
console.log('imageData: ' + imageData);
console.log('filename: ' + 'tmpRadar<?php echo $us['UsersSurvey']['user_id']; ?>-<?php echo $survey['Survey']['id']; ?>.png');
$.post("/Surveys/save_chart", {
src : imageData,
filename: 'tmpRadar<?php echo $us['UsersSurvey']['user_id']; ?>-<?php echo $survey['Survey']['id']; ?>.png'
});
Ведение журнала на стороне клиента:
imageData: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABLAAAAOECAYAAACxbcj6AAAgAElEQ…AgQIAAgVECAqxR49YsAQIECBAgQIAAAQIECBAgQKCfwP8CXHJ+WDHVMbcAAAAASUVORK5CYII=
filename: tmpRadar19-1.png
POST http://website.com/Surveys/save_chart 403 (Forbidden)
Функция PHP, вызываемая AJAX:
public function save_chart() {
if($this->request->is('ajax')) {
$this->log('request data: '.print_r($this->request->data, true));
$filename = $this->request->data['filename'];
$src = $this->request->data['src'];
$src = substr($src, strpos($src, ",") + 1);
$decoded = base64_decode($src);
$fp = fopen(WWW_ROOT.'files/graphs/'.$filename,'wb');
if(fwrite($fp, $decoded)) {
fclose($fp);
return json_encode(array('success' => '1'));
} else {
fclose($fp);
return json_encode(array('success' => '0'));
}
}
}