j'ai besoin de POST une énorme chaîne d'environ 3 Mo, est-il possible de l'envoyer à php en utilisant des paramètres non url?
Si je l'envoie en paramètres url, la demande atteint la taille limite en url.
Comment contourner cela? un indice?
merci beaucoup.
En fait, je le fais comme ceci:
$.ajax({
type:'POST',
.......
data:{string:3MB_string}
});
j'utilise PHP et jQuery, et je voudrais envoyer la chaîne base64 de 3 Mo à php sur une simple URL, comme site.com/script.php
La chaîne est une image base64 de l'API File Reader
ceci est un exemple de chaîne mais cela n'atteindra pas la taille limite ce n'est pas un 3mb est moins gênant en collant que pour vous montrer un 3mb, http://jsfiddle.net/QSyMc/
Vous devrez utiliser une demande POST:
$.ajax({
url: '/script.php',
type: 'POST',
data: { value: 'some huge string here' },
success: function(result) {
alert('the request was successfully sent to the server');
}
});
et dans votre script côté serveur, récupérez la valeur:
$_POST["value"]
Vous devrez peut-être également augmenter la taille de demande autorisée. Par exemple, dans votre .htaccess
fichier ou dans votre php.ini
vous pouvez définir le post_max_size
valeur:
#set max post size
php_value post_max_size 20M
Essayez avec processData
à false et une représentation sous forme de chaîne de votre JSON
var data = { "some" : "data" };
$.ajax({
type: "POST",
url: "/script",
processData: false,
contentType: 'application/json',
data: JSON.stringify(data),
success: function(r) {
console.log(r);
}
});
De la documentation jQuery.ajax :
processData (par défaut: vrai)
Type: booléen
Par défaut, les données transmises à l'option data en tant qu'objet (techniquement, autre chose qu'une chaîne) seront traitées et transformées en une chaîne de requête , ajustement au type de contenu par défaut "application/x-www-form-urlencoded". Si vous souhaitez envoyer un DOMDocument ou d'autres données non traitées, définissez cette option sur false.
Vous devez absolument utiliser la méthode POST. Si la chaîne est toujours trop grande, consultez votre fichier php.ini pour connaître la taille maximale du paramètre POST.
Pour modifier cette valeur, effectuez l'une des opérations suivantes:
1. changez les valeurs dans php.ini
post_max_size=20M
upload_max_filesize=20M
2. Ou ajoutez ce code au fichier .htaccess
php_value post_max_size 20M
php_value upload_max_filesize 20M
Lequel utiliser dépend de ce à quoi vous avez accès.
J'ai rencontré un problème similaire. Ce n'était pas la longueur de la chaîne de requête, mais plutôt le nombre de variables que je transmettais au serveur. Le php.ini place une limite dans le champ max_input_vars à 1200 variables. Dans mon cas, je dépassais ce montant plutôt que le montant post_max_size. J'ai dû revenir en arrière et rendre la requête plus efficace et sous la limite. Je suppose que j'aurais pu augmenter le paramètre php.ini mais j'ai fini avec un meilleur code en désactivant les paramètres de requête non essentiels.
Essaye ça:
var str = "YOUR STRING";
$.ajax({
url: 'YOUR URL',
type: 'POST',
data: { mystring: str },
success: function(result) {
console.log(result);
}
});