1--TEST--
2Test parse_url() function: Parse a load of URLs without specifying the component
3--FILE--
4<?php
5/* Prototype  : proto mixed parse_url(string url, [int url_component])
6 * Description: Parse a and return its components
7 * Source code: ext/standard/url.c
8 * Alias to functions:
9 */
10
11/*
12 * Parse a load of URLs without specifying the component
13 */
14include_once(__DIR__ . '/urls.inc');
15
16foreach ($urls as $url) {
17	echo "\n--> $url: ";
18	var_dump(parse_url($url));
19}
20
21echo "Done";
22?>
23--EXPECT--
24--> 64.246.30.37: array(1) {
25  ["path"]=>
26  string(12) "64.246.30.37"
27}
28
29--> http://64.246.30.37: array(2) {
30  ["scheme"]=>
31  string(4) "http"
32  ["host"]=>
33  string(12) "64.246.30.37"
34}
35
36--> http://64.246.30.37/: array(3) {
37  ["scheme"]=>
38  string(4) "http"
39  ["host"]=>
40  string(12) "64.246.30.37"
41  ["path"]=>
42  string(1) "/"
43}
44
45--> 64.246.30.37/: array(1) {
46  ["path"]=>
47  string(13) "64.246.30.37/"
48}
49
50--> 64.246.30.37:80/: array(3) {
51  ["host"]=>
52  string(12) "64.246.30.37"
53  ["port"]=>
54  int(80)
55  ["path"]=>
56  string(1) "/"
57}
58
59--> php.net: array(1) {
60  ["path"]=>
61  string(7) "php.net"
62}
63
64--> php.net/: array(1) {
65  ["path"]=>
66  string(8) "php.net/"
67}
68
69--> http://php.net: array(2) {
70  ["scheme"]=>
71  string(4) "http"
72  ["host"]=>
73  string(7) "php.net"
74}
75
76--> http://php.net/: array(3) {
77  ["scheme"]=>
78  string(4) "http"
79  ["host"]=>
80  string(7) "php.net"
81  ["path"]=>
82  string(1) "/"
83}
84
85--> www.php.net: array(1) {
86  ["path"]=>
87  string(11) "www.php.net"
88}
89
90--> www.php.net/: array(1) {
91  ["path"]=>
92  string(12) "www.php.net/"
93}
94
95--> http://www.php.net: array(2) {
96  ["scheme"]=>
97  string(4) "http"
98  ["host"]=>
99  string(11) "www.php.net"
100}
101
102--> http://www.php.net/: array(3) {
103  ["scheme"]=>
104  string(4) "http"
105  ["host"]=>
106  string(11) "www.php.net"
107  ["path"]=>
108  string(1) "/"
109}
110
111--> www.php.net:80: array(2) {
112  ["host"]=>
113  string(11) "www.php.net"
114  ["port"]=>
115  int(80)
116}
117
118--> http://www.php.net:80: array(3) {
119  ["scheme"]=>
120  string(4) "http"
121  ["host"]=>
122  string(11) "www.php.net"
123  ["port"]=>
124  int(80)
125}
126
127--> http://www.php.net:80/: array(4) {
128  ["scheme"]=>
129  string(4) "http"
130  ["host"]=>
131  string(11) "www.php.net"
132  ["port"]=>
133  int(80)
134  ["path"]=>
135  string(1) "/"
136}
137
138--> http://www.php.net/index.php: array(3) {
139  ["scheme"]=>
140  string(4) "http"
141  ["host"]=>
142  string(11) "www.php.net"
143  ["path"]=>
144  string(10) "/index.php"
145}
146
147--> www.php.net/?: array(1) {
148  ["path"]=>
149  string(12) "www.php.net/"
150}
151
152--> www.php.net:80/?: array(3) {
153  ["host"]=>
154  string(11) "www.php.net"
155  ["port"]=>
156  int(80)
157  ["path"]=>
158  string(1) "/"
159}
160
161--> http://www.php.net/?: array(3) {
162  ["scheme"]=>
163  string(4) "http"
164  ["host"]=>
165  string(11) "www.php.net"
166  ["path"]=>
167  string(1) "/"
168}
169
170--> http://www.php.net:80/?: array(4) {
171  ["scheme"]=>
172  string(4) "http"
173  ["host"]=>
174  string(11) "www.php.net"
175  ["port"]=>
176  int(80)
177  ["path"]=>
178  string(1) "/"
179}
180
181--> http://www.php.net:80/index.php: array(4) {
182  ["scheme"]=>
183  string(4) "http"
184  ["host"]=>
185  string(11) "www.php.net"
186  ["port"]=>
187  int(80)
188  ["path"]=>
189  string(10) "/index.php"
190}
191
192--> http://www.php.net:80/foo/bar/index.php: array(4) {
193  ["scheme"]=>
194  string(4) "http"
195  ["host"]=>
196  string(11) "www.php.net"
197  ["port"]=>
198  int(80)
199  ["path"]=>
200  string(18) "/foo/bar/index.php"
201}
202
203--> http://www.php.net:80/this/is/a/very/deep/directory/structure/and/file.php: array(4) {
204  ["scheme"]=>
205  string(4) "http"
206  ["host"]=>
207  string(11) "www.php.net"
208  ["port"]=>
209  int(80)
210  ["path"]=>
211  string(53) "/this/is/a/very/deep/directory/structure/and/file.php"
212}
213
214--> http://www.php.net:80/this/is/a/very/deep/directory/structure/and/file.php?lots=1&of=2&parameters=3&too=4&here=5: array(5) {
215  ["scheme"]=>
216  string(4) "http"
217  ["host"]=>
218  string(11) "www.php.net"
219  ["port"]=>
220  int(80)
221  ["path"]=>
222  string(53) "/this/is/a/very/deep/directory/structure/and/file.php"
223  ["query"]=>
224  string(37) "lots=1&of=2&parameters=3&too=4&here=5"
225}
226
227--> http://www.php.net:80/this/is/a/very/deep/directory/structure/and/: array(4) {
228  ["scheme"]=>
229  string(4) "http"
230  ["host"]=>
231  string(11) "www.php.net"
232  ["port"]=>
233  int(80)
234  ["path"]=>
235  string(45) "/this/is/a/very/deep/directory/structure/and/"
236}
237
238--> http://www.php.net:80/this/is/a/very/deep/directory/structure/and/file.php: array(4) {
239  ["scheme"]=>
240  string(4) "http"
241  ["host"]=>
242  string(11) "www.php.net"
243  ["port"]=>
244  int(80)
245  ["path"]=>
246  string(53) "/this/is/a/very/deep/directory/structure/and/file.php"
247}
248
249--> http://www.php.net:80/this/../a/../deep/directory: array(4) {
250  ["scheme"]=>
251  string(4) "http"
252  ["host"]=>
253  string(11) "www.php.net"
254  ["port"]=>
255  int(80)
256  ["path"]=>
257  string(28) "/this/../a/../deep/directory"
258}
259
260--> http://www.php.net:80/this/../a/../deep/directory/: array(4) {
261  ["scheme"]=>
262  string(4) "http"
263  ["host"]=>
264  string(11) "www.php.net"
265  ["port"]=>
266  int(80)
267  ["path"]=>
268  string(29) "/this/../a/../deep/directory/"
269}
270
271--> http://www.php.net:80/this/is/a/very/deep/directory/../file.php: array(4) {
272  ["scheme"]=>
273  string(4) "http"
274  ["host"]=>
275  string(11) "www.php.net"
276  ["port"]=>
277  int(80)
278  ["path"]=>
279  string(42) "/this/is/a/very/deep/directory/../file.php"
280}
281
282--> http://www.php.net:80/index.php: array(4) {
283  ["scheme"]=>
284  string(4) "http"
285  ["host"]=>
286  string(11) "www.php.net"
287  ["port"]=>
288  int(80)
289  ["path"]=>
290  string(10) "/index.php"
291}
292
293--> http://www.php.net:80/index.php?: array(4) {
294  ["scheme"]=>
295  string(4) "http"
296  ["host"]=>
297  string(11) "www.php.net"
298  ["port"]=>
299  int(80)
300  ["path"]=>
301  string(10) "/index.php"
302}
303
304--> http://www.php.net:80/#foo: array(5) {
305  ["scheme"]=>
306  string(4) "http"
307  ["host"]=>
308  string(11) "www.php.net"
309  ["port"]=>
310  int(80)
311  ["path"]=>
312  string(1) "/"
313  ["fragment"]=>
314  string(3) "foo"
315}
316
317--> http://www.php.net:80/?#: array(4) {
318  ["scheme"]=>
319  string(4) "http"
320  ["host"]=>
321  string(11) "www.php.net"
322  ["port"]=>
323  int(80)
324  ["path"]=>
325  string(1) "/"
326}
327
328--> http://www.php.net:80/?test=1: array(5) {
329  ["scheme"]=>
330  string(4) "http"
331  ["host"]=>
332  string(11) "www.php.net"
333  ["port"]=>
334  int(80)
335  ["path"]=>
336  string(1) "/"
337  ["query"]=>
338  string(6) "test=1"
339}
340
341--> http://www.php.net/?test=1&: array(4) {
342  ["scheme"]=>
343  string(4) "http"
344  ["host"]=>
345  string(11) "www.php.net"
346  ["path"]=>
347  string(1) "/"
348  ["query"]=>
349  string(7) "test=1&"
350}
351
352--> http://www.php.net:80/?&: array(5) {
353  ["scheme"]=>
354  string(4) "http"
355  ["host"]=>
356  string(11) "www.php.net"
357  ["port"]=>
358  int(80)
359  ["path"]=>
360  string(1) "/"
361  ["query"]=>
362  string(1) "&"
363}
364
365--> http://www.php.net:80/index.php?test=1&: array(5) {
366  ["scheme"]=>
367  string(4) "http"
368  ["host"]=>
369  string(11) "www.php.net"
370  ["port"]=>
371  int(80)
372  ["path"]=>
373  string(10) "/index.php"
374  ["query"]=>
375  string(7) "test=1&"
376}
377
378--> http://www.php.net/index.php?&: array(4) {
379  ["scheme"]=>
380  string(4) "http"
381  ["host"]=>
382  string(11) "www.php.net"
383  ["path"]=>
384  string(10) "/index.php"
385  ["query"]=>
386  string(1) "&"
387}
388
389--> http://www.php.net:80/index.php?foo&: array(5) {
390  ["scheme"]=>
391  string(4) "http"
392  ["host"]=>
393  string(11) "www.php.net"
394  ["port"]=>
395  int(80)
396  ["path"]=>
397  string(10) "/index.php"
398  ["query"]=>
399  string(4) "foo&"
400}
401
402--> http://www.php.net/index.php?&foo: array(4) {
403  ["scheme"]=>
404  string(4) "http"
405  ["host"]=>
406  string(11) "www.php.net"
407  ["path"]=>
408  string(10) "/index.php"
409  ["query"]=>
410  string(4) "&foo"
411}
412
413--> http://www.php.net:80/index.php?test=1&test2=char&test3=mixesCI: array(5) {
414  ["scheme"]=>
415  string(4) "http"
416  ["host"]=>
417  string(11) "www.php.net"
418  ["port"]=>
419  int(80)
420  ["path"]=>
421  string(10) "/index.php"
422  ["query"]=>
423  string(31) "test=1&test2=char&test3=mixesCI"
424}
425
426--> www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123: array(5) {
427  ["host"]=>
428  string(11) "www.php.net"
429  ["port"]=>
430  int(80)
431  ["path"]=>
432  string(10) "/index.php"
433  ["query"]=>
434  string(31) "test=1&test2=char&test3=mixesCI"
435  ["fragment"]=>
436  string(16) "some_page_ref123"
437}
438
439--> http://secret@www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123: array(7) {
440  ["scheme"]=>
441  string(4) "http"
442  ["host"]=>
443  string(11) "www.php.net"
444  ["port"]=>
445  int(80)
446  ["user"]=>
447  string(6) "secret"
448  ["path"]=>
449  string(10) "/index.php"
450  ["query"]=>
451  string(31) "test=1&test2=char&test3=mixesCI"
452  ["fragment"]=>
453  string(16) "some_page_ref123"
454}
455
456--> http://secret:@www.php.net/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123: array(7) {
457  ["scheme"]=>
458  string(4) "http"
459  ["host"]=>
460  string(11) "www.php.net"
461  ["user"]=>
462  string(6) "secret"
463  ["pass"]=>
464  string(0) ""
465  ["path"]=>
466  string(10) "/index.php"
467  ["query"]=>
468  string(31) "test=1&test2=char&test3=mixesCI"
469  ["fragment"]=>
470  string(16) "some_page_ref123"
471}
472
473--> http://:hideout@www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123: array(8) {
474  ["scheme"]=>
475  string(4) "http"
476  ["host"]=>
477  string(11) "www.php.net"
478  ["port"]=>
479  int(80)
480  ["user"]=>
481  string(0) ""
482  ["pass"]=>
483  string(7) "hideout"
484  ["path"]=>
485  string(10) "/index.php"
486  ["query"]=>
487  string(31) "test=1&test2=char&test3=mixesCI"
488  ["fragment"]=>
489  string(16) "some_page_ref123"
490}
491
492--> http://secret:hideout@www.php.net/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123: array(7) {
493  ["scheme"]=>
494  string(4) "http"
495  ["host"]=>
496  string(11) "www.php.net"
497  ["user"]=>
498  string(6) "secret"
499  ["pass"]=>
500  string(7) "hideout"
501  ["path"]=>
502  string(10) "/index.php"
503  ["query"]=>
504  string(31) "test=1&test2=char&test3=mixesCI"
505  ["fragment"]=>
506  string(16) "some_page_ref123"
507}
508
509--> http://secret@hideout@www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123: array(7) {
510  ["scheme"]=>
511  string(4) "http"
512  ["host"]=>
513  string(11) "www.php.net"
514  ["port"]=>
515  int(80)
516  ["user"]=>
517  string(14) "secret@hideout"
518  ["path"]=>
519  string(10) "/index.php"
520  ["query"]=>
521  string(31) "test=1&test2=char&test3=mixesCI"
522  ["fragment"]=>
523  string(16) "some_page_ref123"
524}
525
526--> http://secret:hid:out@www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123: array(8) {
527  ["scheme"]=>
528  string(4) "http"
529  ["host"]=>
530  string(11) "www.php.net"
531  ["port"]=>
532  int(80)
533  ["user"]=>
534  string(6) "secret"
535  ["pass"]=>
536  string(7) "hid:out"
537  ["path"]=>
538  string(10) "/index.php"
539  ["query"]=>
540  string(31) "test=1&test2=char&test3=mixesCI"
541  ["fragment"]=>
542  string(16) "some_page_ref123"
543}
544
545--> nntp://news.php.net: array(2) {
546  ["scheme"]=>
547  string(4) "nntp"
548  ["host"]=>
549  string(12) "news.php.net"
550}
551
552--> ftp://ftp.gnu.org/gnu/glic/glibc.tar.gz: array(3) {
553  ["scheme"]=>
554  string(3) "ftp"
555  ["host"]=>
556  string(11) "ftp.gnu.org"
557  ["path"]=>
558  string(22) "/gnu/glic/glibc.tar.gz"
559}
560
561--> zlib:http://foo@bar: array(2) {
562  ["scheme"]=>
563  string(4) "zlib"
564  ["path"]=>
565  string(14) "http://foo@bar"
566}
567
568--> zlib:filename.txt: array(2) {
569  ["scheme"]=>
570  string(4) "zlib"
571  ["path"]=>
572  string(12) "filename.txt"
573}
574
575--> zlib:/path/to/my/file/file.txt: array(2) {
576  ["scheme"]=>
577  string(4) "zlib"
578  ["path"]=>
579  string(25) "/path/to/my/file/file.txt"
580}
581
582--> foo://foo@bar: array(3) {
583  ["scheme"]=>
584  string(3) "foo"
585  ["host"]=>
586  string(3) "bar"
587  ["user"]=>
588  string(3) "foo"
589}
590
591--> mailto:me@mydomain.com: array(2) {
592  ["scheme"]=>
593  string(6) "mailto"
594  ["path"]=>
595  string(15) "me@mydomain.com"
596}
597
598--> /foo.php?a=b&c=d: array(2) {
599  ["path"]=>
600  string(8) "/foo.php"
601  ["query"]=>
602  string(7) "a=b&c=d"
603}
604
605--> foo.php?a=b&c=d: array(2) {
606  ["path"]=>
607  string(7) "foo.php"
608  ["query"]=>
609  string(7) "a=b&c=d"
610}
611
612--> http://user:passwd@www.example.com:8080?bar=1&boom=0: array(6) {
613  ["scheme"]=>
614  string(4) "http"
615  ["host"]=>
616  string(15) "www.example.com"
617  ["port"]=>
618  int(8080)
619  ["user"]=>
620  string(4) "user"
621  ["pass"]=>
622  string(6) "passwd"
623  ["query"]=>
624  string(12) "bar=1&boom=0"
625}
626
627--> http://user_me-you:my_pas-word@www.example.com:8080?bar=1&boom=0: array(6) {
628  ["scheme"]=>
629  string(4) "http"
630  ["host"]=>
631  string(15) "www.example.com"
632  ["port"]=>
633  int(8080)
634  ["user"]=>
635  string(11) "user_me-you"
636  ["pass"]=>
637  string(11) "my_pas-word"
638  ["query"]=>
639  string(12) "bar=1&boom=0"
640}
641
642--> file:///path/to/file: array(2) {
643  ["scheme"]=>
644  string(4) "file"
645  ["path"]=>
646  string(13) "/path/to/file"
647}
648
649--> file://path/to/file: array(3) {
650  ["scheme"]=>
651  string(4) "file"
652  ["host"]=>
653  string(4) "path"
654  ["path"]=>
655  string(8) "/to/file"
656}
657
658--> file:/path/to/file: array(2) {
659  ["scheme"]=>
660  string(4) "file"
661  ["path"]=>
662  string(13) "/path/to/file"
663}
664
665--> http://1.2.3.4:/abc.asp?a=1&b=2: array(4) {
666  ["scheme"]=>
667  string(4) "http"
668  ["host"]=>
669  string(7) "1.2.3.4"
670  ["path"]=>
671  string(8) "/abc.asp"
672  ["query"]=>
673  string(7) "a=1&b=2"
674}
675
676--> http://foo.com#bar: array(3) {
677  ["scheme"]=>
678  string(4) "http"
679  ["host"]=>
680  string(7) "foo.com"
681  ["fragment"]=>
682  string(3) "bar"
683}
684
685--> scheme:: array(1) {
686  ["scheme"]=>
687  string(6) "scheme"
688}
689
690--> foo+bar://baz@bang/bla: array(4) {
691  ["scheme"]=>
692  string(7) "foo+bar"
693  ["host"]=>
694  string(4) "bang"
695  ["user"]=>
696  string(3) "baz"
697  ["path"]=>
698  string(4) "/bla"
699}
700
701--> gg:9130731: array(2) {
702  ["scheme"]=>
703  string(2) "gg"
704  ["path"]=>
705  string(7) "9130731"
706}
707
708--> http://user:@pass@host/path?argument?value#etc: array(7) {
709  ["scheme"]=>
710  string(4) "http"
711  ["host"]=>
712  string(4) "host"
713  ["user"]=>
714  string(4) "user"
715  ["pass"]=>
716  string(5) "@pass"
717  ["path"]=>
718  string(5) "/path"
719  ["query"]=>
720  string(14) "argument?value"
721  ["fragment"]=>
722  string(3) "etc"
723}
724
725--> http://10.10.10.10/:80: array(3) {
726  ["scheme"]=>
727  string(4) "http"
728  ["host"]=>
729  string(11) "10.10.10.10"
730  ["path"]=>
731  string(4) "/:80"
732}
733
734--> http://x:?: array(2) {
735  ["scheme"]=>
736  string(4) "http"
737  ["host"]=>
738  string(1) "x"
739}
740
741--> x:blah.com: array(2) {
742  ["scheme"]=>
743  string(1) "x"
744  ["path"]=>
745  string(8) "blah.com"
746}
747
748--> x:/blah.com: array(2) {
749  ["scheme"]=>
750  string(1) "x"
751  ["path"]=>
752  string(9) "/blah.com"
753}
754
755--> x://::abc/?: bool(false)
756
757--> http://::?: array(2) {
758  ["scheme"]=>
759  string(4) "http"
760  ["host"]=>
761  string(1) ":"
762}
763
764--> http://::#: array(2) {
765  ["scheme"]=>
766  string(4) "http"
767  ["host"]=>
768  string(1) ":"
769}
770
771--> x://::6.5: array(3) {
772  ["scheme"]=>
773  string(1) "x"
774  ["host"]=>
775  string(1) ":"
776  ["port"]=>
777  int(6)
778}
779
780--> http://?:/: bool(false)
781
782--> http://@?:/: bool(false)
783
784--> file:///:: array(2) {
785  ["scheme"]=>
786  string(4) "file"
787  ["path"]=>
788  string(2) "/:"
789}
790
791--> file:///a:/: array(2) {
792  ["scheme"]=>
793  string(4) "file"
794  ["path"]=>
795  string(3) "a:/"
796}
797
798--> file:///ab:/: array(2) {
799  ["scheme"]=>
800  string(4) "file"
801  ["path"]=>
802  string(5) "/ab:/"
803}
804
805--> file:///a:/: array(2) {
806  ["scheme"]=>
807  string(4) "file"
808  ["path"]=>
809  string(3) "a:/"
810}
811
812--> file:///@:/: array(2) {
813  ["scheme"]=>
814  string(4) "file"
815  ["path"]=>
816  string(3) "@:/"
817}
818
819--> file:///:80/: array(2) {
820  ["scheme"]=>
821  string(4) "file"
822  ["path"]=>
823  string(5) "/:80/"
824}
825
826--> []: array(1) {
827  ["path"]=>
828  string(2) "[]"
829}
830
831--> http://[x:80]/: array(3) {
832  ["scheme"]=>
833  string(4) "http"
834  ["host"]=>
835  string(6) "[x:80]"
836  ["path"]=>
837  string(1) "/"
838}
839
840--> : array(1) {
841  ["path"]=>
842  string(0) ""
843}
844
845--> /: array(1) {
846  ["path"]=>
847  string(1) "/"
848}
849
850--> /rest/Users?filter={"id":"123"}: array(2) {
851  ["path"]=>
852  string(11) "/rest/Users"
853  ["query"]=>
854  string(19) "filter={"id":"123"}"
855}
856
857--> %:x: array(1) {
858  ["path"]=>
859  string(3) "%:x"
860}
861
862--> https://example.com:0/: array(4) {
863  ["scheme"]=>
864  string(5) "https"
865  ["host"]=>
866  string(11) "example.com"
867  ["port"]=>
868  int(0)
869  ["path"]=>
870  string(1) "/"
871}
872
873--> http:///blah.com: bool(false)
874
875--> http://:80: bool(false)
876
877--> http://user@:80: bool(false)
878
879--> http://user:pass@:80: bool(false)
880
881--> http://:: bool(false)
882
883--> http://@/: bool(false)
884
885--> http://@:/: bool(false)
886
887--> http://:/: bool(false)
888
889--> http://?: bool(false)
890
891--> http://#: bool(false)
892
893--> http://?:: bool(false)
894
895--> http://:?: bool(false)
896
897--> http://blah.com:123456: bool(false)
898
899--> http://blah.com:abcdef: bool(false)
900Done
901