php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #54898 HTTP context option "ignore_errors" does not work as expected
Submitted: 2011-05-21 17:16 UTC Modified: 2011-05-29 19:42 UTC
From: simast at gmail dot com Assigned:
Status: Not a bug Package: Streams related
PHP Version: 5.3.6 OS: Linux/Ubuntu
Private report: No CVE-ID: None
 [2011-05-21 17:16 UTC] simast at gmail dot com
Description:
------------
From documentation I would assume that making a HTTP request with 
"ignore_errors" context option I should always get response body no matter the 
HTTP response code server sent back. This seems to work for just some of the 
response codes (like 404) and will fail with others - "400 Bad Request" for 
example.

This affects fopen() and file_get_contents() as far as I have tested.

An ideal solution would be to:

- if fopen() is called with HTTP context and "ignore_errors" - return a valid 
resource (currently it will return false with a E_WARNING). Next calling 
stream_get_contents() on this resource should return response body. If 
"ignore_errors" is not set - behave the old way - keeping backwards-
compatibility.

- if file_get_contents() is called with HTTP context and "ignore_errors" - 
return response body no matter HTTP response code. Otherwise - keep old 
functionality for backwards compatibility.

Because of this bug writing an API client with HTTP streams is somewhat of  
challenge (or not possible at all).


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2011-05-29 19:42 UTC] bjori@php.net
-Status: Open +Status: Bogus
 [2011-05-29 19:42 UTC] bjori@php.net
Sorry, but your problem does not imply a bug in PHP itself.  For a
list of more appropriate places to ask for help using PHP, please
visit http://www.php.net/support.php as this bug system is not the
appropriate forum for asking support questions.  Due to the volume
of reports we can not explain in detail here why your report is not
a bug.  The support channels will be able to provide an explanation
for you.

Thank you for your interest in PHP.

You are doing something wrong.

/errors.php:
<?php
$errorcode = $_GET["errorcode"];
header("HTTP/1.0 $errorcode foobar");

echo "This is the content of $errorcode";
?>

And executing:

<?php
$opts = array(
    "ignore_errors" => 1,
);

$context  = stream_context_create(array("http" => $opts));
foreach(range(200, 404) as $errorcode) {
    $content = file_get_contents("http://localhost/errors.php?
errorcode=$errorcode", false, $context);
    echo $http_response_header[0], " - ", $content, "\n";
}
?>

Gives me:

HTTP/1.0 200 foobar - This is the content of 200
HTTP/1.0 201 foobar - This is the content of 201
HTTP/1.0 202 foobar - This is the content of 202
HTTP/1.0 203 foobar - This is the content of 203
HTTP/1.0 204 foobar - This is the content of 204
HTTP/1.0 205 foobar - This is the content of 205
HTTP/1.0 206 foobar - This is the content of 206
HTTP/1.0 207 foobar - This is the content of 207
HTTP/1.0 208 foobar - This is the content of 208
HTTP/1.0 209 foobar - This is the content of 209
HTTP/1.0 210 foobar - This is the content of 210
HTTP/1.0 211 foobar - This is the content of 211
HTTP/1.0 212 foobar - This is the content of 212
HTTP/1.0 213 foobar - This is the content of 213
HTTP/1.0 214 foobar - This is the content of 214
HTTP/1.0 215 foobar - This is the content of 215
HTTP/1.0 216 foobar - This is the content of 216
HTTP/1.0 217 foobar - This is the content of 217
HTTP/1.0 218 foobar - This is the content of 218
HTTP/1.0 219 foobar - This is the content of 219
HTTP/1.0 220 foobar - This is the content of 220
HTTP/1.0 221 foobar - This is the content of 221
HTTP/1.0 222 foobar - This is the content of 222
HTTP/1.0 223 foobar - This is the content of 223
HTTP/1.0 224 foobar - This is the content of 224
HTTP/1.0 225 foobar - This is the content of 225
HTTP/1.0 226 foobar - This is the content of 226
HTTP/1.0 227 foobar - This is the content of 227
HTTP/1.0 228 foobar - This is the content of 228
HTTP/1.0 229 foobar - This is the content of 229
HTTP/1.0 230 foobar - This is the content of 230
HTTP/1.0 231 foobar - This is the content of 231
HTTP/1.0 232 foobar - This is the content of 232
HTTP/1.0 233 foobar - This is the content of 233
HTTP/1.0 234 foobar - This is the content of 234
HTTP/1.0 235 foobar - This is the content of 235
HTTP/1.0 236 foobar - This is the content of 236
HTTP/1.0 237 foobar - This is the content of 237
HTTP/1.0 238 foobar - This is the content of 238
HTTP/1.0 239 foobar - This is the content of 239
HTTP/1.0 240 foobar - This is the content of 240
HTTP/1.0 241 foobar - This is the content of 241
HTTP/1.0 242 foobar - This is the content of 242
HTTP/1.0 243 foobar - This is the content of 243
HTTP/1.0 244 foobar - This is the content of 244
HTTP/1.0 245 foobar - This is the content of 245
HTTP/1.0 246 foobar - This is the content of 246
HTTP/1.0 247 foobar - This is the content of 247
HTTP/1.0 248 foobar - This is the content of 248
HTTP/1.0 249 foobar - This is the content of 249
HTTP/1.0 250 foobar - This is the content of 250
HTTP/1.0 251 foobar - This is the content of 251
HTTP/1.0 252 foobar - This is the content of 252
HTTP/1.0 253 foobar - This is the content of 253
HTTP/1.0 254 foobar - This is the content of 254
HTTP/1.0 255 foobar - This is the content of 255
HTTP/1.0 256 foobar - This is the content of 256
HTTP/1.0 257 foobar - This is the content of 257
HTTP/1.0 258 foobar - This is the content of 258
HTTP/1.0 259 foobar - This is the content of 259
HTTP/1.0 260 foobar - This is the content of 260
HTTP/1.0 261 foobar - This is the content of 261
HTTP/1.0 262 foobar - This is the content of 262
HTTP/1.0 263 foobar - This is the content of 263
HTTP/1.0 264 foobar - This is the content of 264
HTTP/1.0 265 foobar - This is the content of 265
HTTP/1.0 266 foobar - This is the content of 266
HTTP/1.0 267 foobar - This is the content of 267
HTTP/1.0 268 foobar - This is the content of 268
HTTP/1.0 269 foobar - This is the content of 269
HTTP/1.0 270 foobar - This is the content of 270
HTTP/1.0 271 foobar - This is the content of 271
HTTP/1.0 272 foobar - This is the content of 272
HTTP/1.0 273 foobar - This is the content of 273
HTTP/1.0 274 foobar - This is the content of 274
HTTP/1.0 275 foobar - This is the content of 275
HTTP/1.0 276 foobar - This is the content of 276
HTTP/1.0 277 foobar - This is the content of 277
HTTP/1.0 278 foobar - This is the content of 278
HTTP/1.0 279 foobar - This is the content of 279
HTTP/1.0 280 foobar - This is the content of 280
HTTP/1.0 281 foobar - This is the content of 281
HTTP/1.0 282 foobar - This is the content of 282
HTTP/1.0 283 foobar - This is the content of 283
HTTP/1.0 284 foobar - This is the content of 284
HTTP/1.0 285 foobar - This is the content of 285
HTTP/1.0 286 foobar - This is the content of 286
HTTP/1.0 287 foobar - This is the content of 287
HTTP/1.0 288 foobar - This is the content of 288
HTTP/1.0 289 foobar - This is the content of 289
HTTP/1.0 290 foobar - This is the content of 290
HTTP/1.0 291 foobar - This is the content of 291
HTTP/1.0 292 foobar - This is the content of 292
HTTP/1.0 293 foobar - This is the content of 293
HTTP/1.0 294 foobar - This is the content of 294
HTTP/1.0 295 foobar - This is the content of 295
HTTP/1.0 296 foobar - This is the content of 296
HTTP/1.0 297 foobar - This is the content of 297
HTTP/1.0 298 foobar - This is the content of 298
HTTP/1.0 299 foobar - This is the content of 299
HTTP/1.0 300 foobar - This is the content of 300
HTTP/1.0 301 foobar - This is the content of 301
HTTP/1.0 302 foobar - This is the content of 302
HTTP/1.0 303 foobar - This is the content of 303
HTTP/1.0 304 foobar - This is the content of 304
HTTP/1.0 305 foobar - This is the content of 305
HTTP/1.0 306 foobar - This is the content of 306
HTTP/1.0 307 foobar - This is the content of 307
HTTP/1.0 308 foobar - This is the content of 308
HTTP/1.0 309 foobar - This is the content of 309
HTTP/1.0 310 foobar - This is the content of 310
HTTP/1.0 311 foobar - This is the content of 311
HTTP/1.0 312 foobar - This is the content of 312
HTTP/1.0 313 foobar - This is the content of 313
HTTP/1.0 314 foobar - This is the content of 314
HTTP/1.0 315 foobar - This is the content of 315
HTTP/1.0 316 foobar - This is the content of 316
HTTP/1.0 317 foobar - This is the content of 317
HTTP/1.0 318 foobar - This is the content of 318
HTTP/1.0 319 foobar - This is the content of 319
HTTP/1.0 320 foobar - This is the content of 320
HTTP/1.0 321 foobar - This is the content of 321
HTTP/1.0 322 foobar - This is the content of 322
HTTP/1.0 323 foobar - This is the content of 323
HTTP/1.0 324 foobar - This is the content of 324
HTTP/1.0 325 foobar - This is the content of 325
HTTP/1.0 326 foobar - This is the content of 326
HTTP/1.0 327 foobar - This is the content of 327
HTTP/1.0 328 foobar - This is the content of 328
HTTP/1.0 329 foobar - This is the content of 329
HTTP/1.0 330 foobar - This is the content of 330
HTTP/1.0 331 foobar - This is the content of 331
HTTP/1.0 332 foobar - This is the content of 332
HTTP/1.0 333 foobar - This is the content of 333
HTTP/1.0 334 foobar - This is the content of 334
HTTP/1.0 335 foobar - This is the content of 335
HTTP/1.0 336 foobar - This is the content of 336
HTTP/1.0 337 foobar - This is the content of 337
HTTP/1.0 338 foobar - This is the content of 338
HTTP/1.0 339 foobar - This is the content of 339
HTTP/1.0 340 foobar - This is the content of 340
HTTP/1.0 341 foobar - This is the content of 341
HTTP/1.0 342 foobar - This is the content of 342
HTTP/1.0 343 foobar - This is the content of 343
HTTP/1.0 344 foobar - This is the content of 344
HTTP/1.0 345 foobar - This is the content of 345
HTTP/1.0 346 foobar - This is the content of 346
HTTP/1.0 347 foobar - This is the content of 347
HTTP/1.0 348 foobar - This is the content of 348
HTTP/1.0 349 foobar - This is the content of 349
HTTP/1.0 350 foobar - This is the content of 350
HTTP/1.0 351 foobar - This is the content of 351
HTTP/1.0 352 foobar - This is the content of 352
HTTP/1.0 353 foobar - This is the content of 353
HTTP/1.0 354 foobar - This is the content of 354
HTTP/1.0 355 foobar - This is the content of 355
HTTP/1.0 356 foobar - This is the content of 356
HTTP/1.0 357 foobar - This is the content of 357
HTTP/1.0 358 foobar - This is the content of 358
HTTP/1.0 359 foobar - This is the content of 359
HTTP/1.0 360 foobar - This is the content of 360
HTTP/1.0 361 foobar - This is the content of 361
HTTP/1.0 362 foobar - This is the content of 362
HTTP/1.0 363 foobar - This is the content of 363
HTTP/1.0 364 foobar - This is the content of 364
HTTP/1.0 365 foobar - This is the content of 365
HTTP/1.0 366 foobar - This is the content of 366
HTTP/1.0 367 foobar - This is the content of 367
HTTP/1.0 368 foobar - This is the content of 368
HTTP/1.0 369 foobar - This is the content of 369
HTTP/1.0 370 foobar - This is the content of 370
HTTP/1.0 371 foobar - This is the content of 371
HTTP/1.0 372 foobar - This is the content of 372
HTTP/1.0 373 foobar - This is the content of 373
HTTP/1.0 374 foobar - This is the content of 374
HTTP/1.0 375 foobar - This is the content of 375
HTTP/1.0 376 foobar - This is the content of 376
HTTP/1.0 377 foobar - This is the content of 377
HTTP/1.0 378 foobar - This is the content of 378
HTTP/1.0 379 foobar - This is the content of 379
HTTP/1.0 380 foobar - This is the content of 380
HTTP/1.0 381 foobar - This is the content of 381
HTTP/1.0 382 foobar - This is the content of 382
HTTP/1.0 383 foobar - This is the content of 383
HTTP/1.0 384 foobar - This is the content of 384
HTTP/1.0 385 foobar - This is the content of 385
HTTP/1.0 386 foobar - This is the content of 386
HTTP/1.0 387 foobar - This is the content of 387
HTTP/1.0 388 foobar - This is the content of 388
HTTP/1.0 389 foobar - This is the content of 389
HTTP/1.0 390 foobar - This is the content of 390
HTTP/1.0 391 foobar - This is the content of 391
HTTP/1.0 392 foobar - This is the content of 392
HTTP/1.0 393 foobar - This is the content of 393
HTTP/1.0 394 foobar - This is the content of 394
HTTP/1.0 395 foobar - This is the content of 395
HTTP/1.0 396 foobar - This is the content of 396
HTTP/1.0 397 foobar - This is the content of 397
HTTP/1.0 398 foobar - This is the content of 398
HTTP/1.0 399 foobar - This is the content of 399
HTTP/1.0 400 foobar - This is the content of 400
HTTP/1.0 401 foobar - This is the content of 401
HTTP/1.0 402 foobar - This is the content of 402
HTTP/1.0 403 foobar - This is the content of 403
HTTP/1.0 404 foobar - This is the content of 404
 
PHP Copyright © 2001-2022 The PHP Group
All rights reserved.
Last updated: Thu Jan 20 08:03:48 2022 UTC