mirror of
https://github.com/bdnugget/php-src.git
synced 2026-11-10 10:40:50 +00:00
Compare commits
943
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7d14f70776 | ||
|
|
3d76289c59 | ||
|
|
eabb9be2ac | ||
|
|
f9207e3187 | ||
|
|
a0eb5848b5 | ||
|
|
cba0322c81 | ||
|
|
fc6e70d8e4 | ||
|
|
1504071cb1 | ||
|
|
5efdfee8c6 | ||
|
|
03fd10c479 | ||
|
|
75eeee8f24 | ||
|
|
0aa36e2d97 | ||
|
|
0f53b4e515 | ||
|
|
76ba9b44b4 | ||
|
|
3dc4f14c6b | ||
|
|
3e0b63312e | ||
|
|
689d1d9e4b | ||
|
|
686c7fec26 | ||
|
|
85ef85a0b4 | ||
|
|
f561727ee0 | ||
|
|
c8e40e49d7 | ||
|
|
63d87a0adb | ||
|
|
06c183b761 | ||
|
|
aef55bc5f3 | ||
|
|
9f045cd40e | ||
|
|
094bcdff8b | ||
|
|
334e62a77d | ||
|
|
3da811a124 | ||
|
|
f915973c1e | ||
|
|
cd62a70863 | ||
|
|
92fa280b96 | ||
|
|
24c87d760d | ||
|
|
2024790fd2 | ||
|
|
d506ce8d94 | ||
|
|
4adcc3c7bc | ||
|
|
4c76006fe3 | ||
|
|
964eff5276 | ||
|
|
085e8b781c | ||
|
|
761c62267f | ||
|
|
f719d3707d | ||
|
|
dd92188d76 | ||
|
|
7111501381 | ||
|
|
e16265aa0e | ||
|
|
688b347d84 | ||
|
|
8cf9513bb9 | ||
|
|
3239a25e53 | ||
|
|
f28cff1925 | ||
|
|
c70397b3a9 | ||
|
|
f13f4bc872 | ||
|
|
222e0bc0f6 | ||
|
|
523da85c11 | ||
|
|
05abc63d14 | ||
|
|
dbeef88661 | ||
|
|
2ba369cdfa | ||
|
|
a9a2eb4a14 | ||
|
|
ac15afe9c1 | ||
|
|
4f3ab10786 | ||
|
|
8ed386997f | ||
|
|
a40667d756 | ||
|
|
534395e4ae | ||
|
|
2a545be57f | ||
|
|
167e51f36c | ||
|
|
abb7038cbf | ||
|
|
ac4f3422bc | ||
|
|
9ea04e1e46 | ||
|
|
1ac484d1a1 | ||
|
|
78f10489ca | ||
|
|
5f1b91a6bf | ||
|
|
4415b3af51 | ||
|
|
c8462df127 | ||
|
|
f061627899 | ||
|
|
e6c213b8ea | ||
|
|
93a4e0d1fa | ||
|
|
f16059d697 | ||
|
|
61d97af18b | ||
|
|
a8b4724747 | ||
|
|
caf792940f | ||
|
|
64f21f63ad | ||
|
|
cdab5577c0 | ||
|
|
63f65b6e8f | ||
|
|
7a8d9ad16a | ||
|
|
f5570be3a9 | ||
|
|
ff26185322 | ||
|
|
ce96fd6b07 | ||
|
|
75631ab8ac | ||
|
|
60ad3e54af | ||
|
|
95a88f04a9 | ||
|
|
a2434bb66c | ||
|
|
267634b766 | ||
|
|
a31f379367 | ||
|
|
e516b7a964 | ||
|
|
6f7821a82d | ||
|
|
4ced44323d | ||
|
|
7b27de9f0b | ||
|
|
d225fe4e58 | ||
|
|
5d2e201c3d | ||
|
|
7716873a5b | ||
|
|
404580d95c | ||
|
|
bbf58f9234 | ||
|
|
5ddbeffc6f | ||
|
|
49493e226d | ||
|
|
2bc233e856 | ||
|
|
f819965513 | ||
|
|
2ea52b1fb4 | ||
|
|
4af7de49aa | ||
|
|
e6de920a27 | ||
|
|
1045aa2a7c | ||
|
|
d91c4be0d6 | ||
|
|
f6b3d22218 | ||
|
|
5ef0100b4d | ||
|
|
c95477e729 | ||
|
|
6958cb4a14 | ||
|
|
46983d532e | ||
|
|
e0858b424a | ||
|
|
a0ccf0f14a | ||
|
|
8901635d73 | ||
|
|
bb1dbdf62c | ||
|
|
28b41c811d | ||
|
|
9b4999881f | ||
|
|
47713462ce | ||
|
|
0e72e5897e | ||
|
|
c095bec250 | ||
|
|
3332c5be08 | ||
|
|
b343748d56 | ||
|
|
c28f44e409 | ||
|
|
5a416465a0 | ||
|
|
da29092159 | ||
|
|
7bc07ff884 | ||
|
|
8dd82c5fde | ||
|
|
71a8b75c51 | ||
|
|
8977fc8ace | ||
|
|
d7e8aaea46 | ||
|
|
0a1e29d74b | ||
|
|
4cc8073839 | ||
|
|
7e56681670 | ||
|
|
07abcdc031 | ||
|
|
f4b2664e2c | ||
|
|
29bdf30880 | ||
|
|
7a42845d80 | ||
|
|
2bf58d8c70 | ||
|
|
77d160772f | ||
|
|
4df2980242 | ||
|
|
84dc845ff8 | ||
|
|
89d372ba27 | ||
|
|
22f7998a0d | ||
|
|
b01b2e6d0b | ||
|
|
817776d1b9 | ||
|
|
53544e36f2 | ||
|
|
c3557ba32e | ||
|
|
f407fc4e01 | ||
|
|
0399b83ccb | ||
|
|
e6bef6735f | ||
|
|
50863932a6 | ||
|
|
1db7472a73 | ||
|
|
f4927c28bc | ||
|
|
996f45b688 | ||
|
|
7636635ec5 | ||
|
|
837391a9a7 | ||
|
|
8342c36f09 | ||
|
|
b84e262f63 | ||
|
|
dd038a9c89 | ||
|
|
68107ae1c3 | ||
|
|
8efec79ffe | ||
|
|
e61005f712 | ||
|
|
6c3ddc70ed | ||
|
|
535033074a | ||
|
|
9d25e7ee7b | ||
|
|
21638aed88 | ||
|
|
815d0e549b | ||
|
|
7b4cbadfce | ||
|
|
7ded7577b2 | ||
|
|
a1632696a8 | ||
|
|
e547a0dfec | ||
|
|
309aefc7e7 | ||
|
|
3ac257f344 | ||
|
|
cd63986283 | ||
|
|
6e0f2daf65 | ||
|
|
f4d15d8226 | ||
|
|
231da1a5cb | ||
|
|
c10af225c4 | ||
|
|
cd6ea54deb | ||
|
|
443bedf204 | ||
|
|
4c34cd9f38 | ||
|
|
db75ce41a3 | ||
|
|
ee80871a15 | ||
|
|
b5b4f94a4c | ||
|
|
0086bc8a96 | ||
|
|
762a1b2d26 | ||
|
|
384cd8cda5 | ||
|
|
5721132c29 | ||
|
|
3cb6a460a6 | ||
|
|
eabf03f436 | ||
|
|
6887b97a8d | ||
|
|
924bb78167 | ||
|
|
4cedb6d08a | ||
|
|
f7c44c8c4d | ||
|
|
8a2a6dbe21 | ||
|
|
8c5921bfb8 | ||
|
|
6ab767262c | ||
|
|
6a289f4d10 | ||
|
|
946f95c0fc | ||
|
|
3ab0b74de9 | ||
|
|
a3cef7b435 | ||
|
|
30d6cc8919 | ||
|
|
c99251f87e | ||
|
|
db633fb71d | ||
|
|
b88f7753a1 | ||
|
|
14a54b903e | ||
|
|
d46dcd301e | ||
|
|
99b613cbc8 | ||
|
|
40c3aefafb | ||
|
|
4e2fd7eeba | ||
|
|
485a094334 | ||
|
|
93d7715e7b | ||
|
|
f7582fc43b | ||
|
|
2d2d6f84ba | ||
|
|
a4252ab2be | ||
|
|
8d34fe0d22 | ||
|
|
1f86f6be31 | ||
|
|
4f62c099cd | ||
|
|
1cca9d4bf1 | ||
|
|
062ddaa700 | ||
|
|
58a15c2cf5 | ||
|
|
82de444f9a | ||
|
|
eb2908c3f7 | ||
|
|
25e84b6a23 | ||
|
|
3daf54ffa0 | ||
|
|
548661d96d | ||
|
|
e97a07ae9e | ||
|
|
bd73903efb | ||
|
|
421b86ed5e | ||
|
|
ccaff0e994 | ||
|
|
1b60eb8813 | ||
|
|
455db21e06 | ||
|
|
bf7e6f930c | ||
|
|
bf6440d00a | ||
|
|
c4e145b0bc | ||
|
|
33c99f9a44 | ||
|
|
efe22e3bfa | ||
|
|
87edd143ed | ||
|
|
df2261df2a | ||
|
|
234181f690 | ||
|
|
4c88033aa2 | ||
|
|
b3a3c8f7a6 | ||
|
|
7e61cffb0d | ||
|
|
54624f9902 | ||
|
|
a4ad111454 | ||
|
|
9f73a4e045 | ||
|
|
4c63a2232d | ||
|
|
5aca10ee13 | ||
|
|
159ed311cc | ||
|
|
cacd5ad924 | ||
|
|
1f9a7fd758 | ||
|
|
ee2a82e327 | ||
|
|
122179478a | ||
|
|
4113fad4ec | ||
|
|
71bbb24ff0 | ||
|
|
2d925fb216 | ||
|
|
817c28c867 | ||
|
|
090a9b3331 | ||
|
|
4b0927b042 | ||
|
|
4d8503a212 | ||
|
|
bc6e920ebc | ||
|
|
b55d4ecb41 | ||
|
|
60327d87a7 | ||
|
|
5c6f0ebeab | ||
|
|
104bf57ae7 | ||
|
|
5f9956397f | ||
|
|
0db999a94f | ||
|
|
3113744c57 | ||
|
|
517fd63c32 | ||
|
|
a5459c09c9 | ||
|
|
22d73027d0 | ||
|
|
6bae8fbd9c | ||
|
|
edb4351004 | ||
|
|
2cd1661e2d | ||
|
|
761cc30055 | ||
|
|
42a80fac8c | ||
|
|
b080cfcc71 | ||
|
|
2d4c7b4033 | ||
|
|
4839387edd | ||
|
|
fc2ed1b5d0 | ||
|
|
216effe4f5 | ||
|
|
8bb124394b | ||
|
|
389965f1de | ||
|
|
107f916322 | ||
|
|
f1d2e1453c | ||
|
|
bdaec773b5 | ||
|
|
7f0ec2a127 | ||
|
|
841c151b64 | ||
|
|
ff27146950 | ||
|
|
86c1364695 | ||
|
|
b962a566af | ||
|
|
1de4cfb791 | ||
|
|
047f0e4d88 | ||
|
|
2ff0c392e7 | ||
|
|
7f6d8e53fd | ||
|
|
1a40f20729 | ||
|
|
9aafc5d1c6 | ||
|
|
c30edd027f | ||
|
|
531085785b | ||
|
|
63883d4970 | ||
|
|
2d656381f8 | ||
|
|
fe726b1beb | ||
|
|
88117e6128 | ||
|
|
064578114f | ||
|
|
664f06616a | ||
|
|
17ae7c1659 | ||
|
|
d99ee78503 | ||
|
|
416240947b | ||
|
|
0dc0d76854 | ||
|
|
09ca429157 | ||
|
|
fc2143b993 | ||
|
|
8c1582c9ad | ||
|
|
0631d2c59d | ||
|
|
877a6f92f0 | ||
|
|
992991fe1b | ||
|
|
1f06a6a4e8 | ||
|
|
4119b09a1a | ||
|
|
f4da90705b | ||
|
|
25ac985422 | ||
|
|
65942d343f | ||
|
|
013727e1c7 | ||
|
|
e5323bde9a | ||
|
|
ffd60af473 | ||
|
|
eafd04d172 | ||
|
|
3a2f5c2219 | ||
|
|
a7da07a15f | ||
|
|
d97c07c265 | ||
|
|
6ca2ea7109 | ||
|
|
20944e2516 | ||
|
|
cd727b4e9a | ||
|
|
77d307ccbf | ||
|
|
2b04364852 | ||
|
|
391ff7682c | ||
|
|
6e06a45f24 | ||
|
|
03df7fce82 | ||
|
|
97f6da74a1 | ||
|
|
bcea4e69bb | ||
|
|
7a2c4afa91 | ||
|
|
abd1af951c | ||
|
|
b310ce9ccc | ||
|
|
ce82e028b2 | ||
|
|
266ff49a9a | ||
|
|
9a1623dc5f | ||
|
|
c725c054d6 | ||
|
|
f696aece3f | ||
|
|
c286d482aa | ||
|
|
80ddb8d95c | ||
|
|
4275e7428b | ||
|
|
6c08709bd6 | ||
|
|
329cab2942 | ||
|
|
d30323b867 | ||
|
|
8022e383ff | ||
|
|
4789901728 | ||
|
|
c7b95db5ab | ||
|
|
48814f96ef | ||
|
|
edfe2e11db | ||
|
|
a54ac71371 | ||
|
|
292785ed61 | ||
|
|
8220c2e4ce | ||
|
|
13fd8fcded | ||
|
|
87bf415853 | ||
|
|
6396a3272c | ||
|
|
6b2b7046ed | ||
|
|
5fd50c99cb | ||
|
|
d27642fece | ||
|
|
c37b0c690a | ||
|
|
cbd21afae9 | ||
|
|
0605d5f309 | ||
|
|
c0840f18f3 | ||
|
|
77d650908d | ||
|
|
72bef34918 | ||
|
|
c55632007e | ||
|
|
f671ad6275 | ||
|
|
71966d1e5a | ||
|
|
b8837a79b2 | ||
|
|
adbf9e766e | ||
|
|
bb8ec8d629 | ||
|
|
aa82af78e4 | ||
|
|
83a2d6e96e | ||
|
|
550e18eaed | ||
|
|
bd184cc572 | ||
|
|
a7057e4e49 | ||
|
|
d0e7e5aa2a | ||
|
|
a12d2bf747 | ||
|
|
3c3ddb39b4 | ||
|
|
d9f50d95e3 | ||
|
|
a5e51efff8 | ||
|
|
6338f99d52 | ||
|
|
8fba11c57b | ||
|
|
07986a53e3 | ||
|
|
ab778e7414 | ||
|
|
7a83093a3b | ||
|
|
adcf926b80 | ||
|
|
c783495edf | ||
|
|
f9c6bb1ad8 | ||
|
|
411d090895 | ||
|
|
b9d73bb910 | ||
|
|
a6c5363f05 | ||
|
|
6326528127 | ||
|
|
1d7ce1aae0 | ||
|
|
3947bfeadf | ||
|
|
da3743b7b9 | ||
|
|
6db49b7864 | ||
|
|
1f3aaf508c | ||
|
|
0f58370215 | ||
|
|
4348f9e163 | ||
|
|
bb89f5c275 | ||
|
|
27567040d2 | ||
|
|
72064e1a28 | ||
|
|
06c460c995 | ||
|
|
0b1477a716 | ||
|
|
e92ebce7f8 | ||
|
|
c2c3467ab4 | ||
|
|
2fb2f81538 | ||
|
|
ed806c4461 | ||
|
|
2a926ec6ec | ||
|
|
33c7b63c6c | ||
|
|
a109c3538f | ||
|
|
5a3624221b | ||
|
|
a780e73f62 | ||
|
|
cee97080d1 | ||
|
|
c204922c7f | ||
|
|
0a9ca62a77 | ||
|
|
4d72dba301 | ||
|
|
e577899507 | ||
|
|
894dc2480c | ||
|
|
f8e312ea27 | ||
|
|
2f2cdc6a51 | ||
|
|
6c579efc43 | ||
|
|
7ca414f5e7 | ||
|
|
890c709036 | ||
|
|
61a1bad720 | ||
|
|
4588d5d79f | ||
|
|
bb669f2c1b | ||
|
|
1bd381890d | ||
|
|
bbeafa1dcf | ||
|
|
842bc947e2 | ||
|
|
c5602787fc | ||
|
|
c101964325 | ||
|
|
e72a69aae6 | ||
|
|
a6100682d0 | ||
|
|
973e134d2d | ||
|
|
14edb68858 | ||
|
|
8409cb44b2 | ||
|
|
6fc06f265e | ||
|
|
92ef63a07b | ||
|
|
8bf7114691 | ||
|
|
50a0ea7b8c | ||
|
|
49f22527cc | ||
|
|
1e4d963734 | ||
|
|
1178d719ea | ||
|
|
8deefa8780 | ||
|
|
7d55780ca0 | ||
|
|
658272c9ee | ||
|
|
0d3d292633 | ||
|
|
f8c2680509 | ||
|
|
cf7d0fb4e7 | ||
|
|
1e26362d4b | ||
|
|
904b9282fe | ||
|
|
7ab1a74f49 | ||
|
|
d0dc4810eb | ||
|
|
afed1468e4 | ||
|
|
f4644c8c85 | ||
|
|
07c1929a7a | ||
|
|
8be696d143 | ||
|
|
7e8ec822a5 | ||
|
|
97317c7b1e | ||
|
|
a59ffde6bc | ||
|
|
fbe6499d46 | ||
|
|
231d8dd526 | ||
|
|
c0edb4afce | ||
|
|
9d02d50df2 | ||
|
|
64ceec13f2 | ||
|
|
0d1ab2f6ac | ||
|
|
f171aefb31 | ||
|
|
1e17bb2aab | ||
|
|
5fe988518a | ||
|
|
c80e055c9c | ||
|
|
1c50d5385d | ||
|
|
6150174941 | ||
|
|
3ef14fc609 | ||
|
|
c0e6f37cb9 | ||
|
|
cb1d315b7d | ||
|
|
30a8dcff1b | ||
|
|
e3ddef53b4 | ||
|
|
4445c85d4f | ||
|
|
444bba79ba | ||
|
|
110fab9803 | ||
|
|
a0bf0739a9 | ||
|
|
ed4f6dbd36 | ||
|
|
94286b35e3 | ||
|
|
3aceb07efd | ||
|
|
ebc6982eb8 | ||
|
|
200b139c69 | ||
|
|
6212b88ef3 | ||
|
|
72ff4aac7e | ||
|
|
426e14a6ed | ||
|
|
5ce0bb46f6 | ||
|
|
2e1cd1e133 | ||
|
|
5126ac9ab0 | ||
|
|
c11850b406 | ||
|
|
b1fb44660d | ||
|
|
221c71032f | ||
|
|
d53e8cfb83 | ||
|
|
ede218d54c | ||
|
|
a30113b617 | ||
|
|
1dc9e43cd0 | ||
|
|
50554563af | ||
|
|
6d85947b52 | ||
|
|
4c961e9045 | ||
|
|
d733338225 | ||
|
|
e71ee33358 | ||
|
|
00fabe553a | ||
|
|
e6dc3a5cbc | ||
|
|
c02f6724a8 | ||
|
|
f20dd1f9ae | ||
|
|
5f790678ec | ||
|
|
a3bf7aa4fe | ||
|
|
6106c44c10 | ||
|
|
e670162315 | ||
|
|
ce1bd65d29 | ||
|
|
a4ff8bce62 | ||
|
|
e1ce0a64ea | ||
|
|
336b5af34b | ||
|
|
a4d1188313 | ||
|
|
09d8bbb2ee | ||
|
|
0891e86ed8 | ||
|
|
e46fee1d1a | ||
|
|
c06a26a524 | ||
|
|
3b38626603 | ||
|
|
2b48156eab | ||
|
|
92ba590555 | ||
|
|
1fe5265c3e | ||
|
|
112ac7e978 | ||
|
|
af2d266a09 | ||
|
|
4e606e3ceb | ||
|
|
96bb25e8e7 | ||
|
|
865f85718f | ||
|
|
9c60bd8df7 | ||
|
|
a8e80ec235 | ||
|
|
0488a86634 | ||
|
|
ced29dd706 | ||
|
|
9b07568c43 | ||
|
|
0cc45e7bdb | ||
|
|
10a9634bc9 | ||
|
|
eb5e97adf5 | ||
|
|
419f589580 | ||
|
|
9ea7a70e24 | ||
|
|
e64734f986 | ||
|
|
22458ed4d5 | ||
|
|
86544f5971 | ||
|
|
5a3a34e3e6 | ||
|
|
89bd3af6b9 | ||
|
|
d27d572a7d | ||
|
|
2bb9bbb803 | ||
|
|
08e1471c16 | ||
|
|
53324e8830 | ||
|
|
698539fa79 | ||
|
|
6b990988f1 | ||
|
|
6ee4060bfa | ||
|
|
c6e852d7db | ||
|
|
ffdd175918 | ||
|
|
5a4a66cdd5 | ||
|
|
6b730a04ae | ||
|
|
7f79e86886 | ||
|
|
7d0eedf08c | ||
|
|
f3448471df | ||
|
|
d52e132203 | ||
|
|
8661e8d298 | ||
|
|
8a142cb861 | ||
|
|
a46cb6b513 | ||
|
|
06c987663a | ||
|
|
ae4ae5a313 | ||
|
|
c4c6b69b64 | ||
|
|
84f3b13264 | ||
|
|
49418ce7da | ||
|
|
d4746a659e | ||
|
|
42c4bafbbd | ||
|
|
d596ea742a | ||
|
|
d47e50a9ff | ||
|
|
cfd930d218 | ||
|
|
4029454a0d | ||
|
|
ec54570362 | ||
|
|
3896e7403d | ||
|
|
ddc9246071 | ||
|
|
f310305fc2 | ||
|
|
2cfb5e4254 | ||
|
|
33ac0d0e33 | ||
|
|
d686b7579a | ||
|
|
d1c912628d | ||
|
|
24b8bc3489 | ||
|
|
8fcd33ed18 | ||
|
|
3d5f729181 | ||
|
|
0da5464a81 | ||
|
|
83051b1a86 | ||
|
|
1d9c49bb3c | ||
|
|
0296501274 | ||
|
|
22df3125d5 | ||
|
|
d652e02235 | ||
|
|
205775507a | ||
|
|
764a95f6f3 | ||
|
|
f1e02c5cc7 | ||
|
|
4d3944f941 | ||
|
|
5eb64a4957 | ||
|
|
899bc2f582 | ||
|
|
d24c14cb59 | ||
|
|
afcb62ba1e | ||
|
|
7aaef918a6 | ||
|
|
90906a91e9 | ||
|
|
748dd20476 | ||
|
|
9daa864c4f | ||
|
|
e692080fc5 | ||
|
|
cac310d87e | ||
|
|
442fa8dc1b | ||
|
|
f7d82d0e0d | ||
|
|
0d4720a61b | ||
|
|
9e5313fdca | ||
|
|
32447e4902 | ||
|
|
dbddbb6e34 | ||
|
|
178ee9325d | ||
|
|
3c9e1e6d70 | ||
|
|
73a413bdea | ||
|
|
481f77890d | ||
|
|
20f6aaeca9 | ||
|
|
aeae0d1bad | ||
|
|
3e5ac35bd9 | ||
|
|
761dbeedbb | ||
|
|
f8b17007e0 | ||
|
|
9badd4f0fb | ||
|
|
6b1d256af5 | ||
|
|
68cd943189 | ||
|
|
5afc8e2c83 | ||
|
|
ae01c146d1 | ||
|
|
a8be1c1d4b | ||
|
|
0fb528edee | ||
|
|
b65a473efb | ||
|
|
d78fb2b14a | ||
|
|
6d1d27bc3a | ||
|
|
707980c2be | ||
|
|
badf05a8ea | ||
|
|
b690b940ca | ||
|
|
5441c86936 | ||
|
|
a14dd7502b | ||
|
|
c42d8b3776 | ||
|
|
7deae5022d | ||
|
|
9ef6a73dee | ||
|
|
8454cca44c | ||
|
|
a259f797bf | ||
|
|
6ba6263817 | ||
|
|
24ef65019f | ||
|
|
c453a8fcda | ||
|
|
7c1d43dd95 | ||
|
|
d4cca6da93 | ||
|
|
d7b1fa9d35 | ||
|
|
4a0b4494d4 | ||
|
|
41406516b6 | ||
|
|
2a043ed2d3 | ||
|
|
38f6c131e5 | ||
|
|
b472636375 | ||
|
|
047d6f2855 | ||
|
|
b61d7501c9 | ||
|
|
4cd5db922b | ||
|
|
cf140b3bf7 | ||
|
|
c0a8ce2f61 | ||
|
|
0ab82cecc2 | ||
|
|
9b334da667 | ||
|
|
fb80ebe102 | ||
|
|
4b5666a539 | ||
|
|
2613069cd4 | ||
|
|
46c0f21386 | ||
|
|
e2d9e0ae70 | ||
|
|
dbe35d87d6 | ||
|
|
e750930899 | ||
|
|
54caf22325 | ||
|
|
42d25dc2b2 | ||
|
|
901fc6f3a4 | ||
|
|
9cfcc89a0b | ||
|
|
435405f5da | ||
|
|
bb3faf2d25 | ||
|
|
a622dd6bfb | ||
|
|
66ef4d185c | ||
|
|
ce03ced4d7 | ||
|
|
ba6ee3fc06 | ||
|
|
3aa95c59cc | ||
|
|
6ebe80be5d | ||
|
|
6356bcbbb9 | ||
|
|
ce2fbe1931 | ||
|
|
5efee3d587 | ||
|
|
b7385f02fd | ||
|
|
4d005a8e65 | ||
|
|
ce136a825c | ||
|
|
0d468290be | ||
|
|
d6458c3b1e | ||
|
|
00191c3c34 | ||
|
|
c4be9c3890 | ||
|
|
58f13c3c9f | ||
|
|
bccf2cea5d | ||
|
|
f3009cb596 | ||
|
|
c5ff0eb5b8 | ||
|
|
bcdc3b30f7 | ||
|
|
621cdd9019 | ||
|
|
c389adb96a | ||
|
|
4abc7a1e69 | ||
|
|
348880ce66 | ||
|
|
337513ffa0 | ||
|
|
ed4ce335d8 | ||
|
|
5583cd237f | ||
|
|
159369c68c | ||
|
|
29c99daa0f | ||
|
|
ef1eeff882 | ||
|
|
9c90bf42c1 | ||
|
|
ea3a6539dc | ||
|
|
3bdc7518a2 | ||
|
|
b4500e9b85 | ||
|
|
797bb31e24 | ||
|
|
2655e63e10 | ||
|
|
60c236be92 | ||
|
|
0d47dff287 | ||
|
|
c91c86b743 | ||
|
|
8a402bf368 | ||
|
|
f4994234e2 | ||
|
|
a1de9f382a | ||
|
|
50a1b1d06c | ||
|
|
57cfa703bf | ||
|
|
df59ed1c11 | ||
|
|
a22cd02f2f | ||
|
|
059e2be153 | ||
|
|
9db78b574b | ||
|
|
c9fc939be0 | ||
|
|
e3be1e0bea | ||
|
|
c881ee30ea | ||
|
|
34ffc8a6c4 | ||
|
|
b86ebe46cb | ||
|
|
ce0ea97850 | ||
|
|
a78fa3fcaf | ||
|
|
90f16527af | ||
|
|
aad53cbdec | ||
|
|
87bac04bf1 | ||
|
|
32a09f39be | ||
|
|
24704df3a8 | ||
|
|
a8cad398fc | ||
|
|
c5a068e025 | ||
|
|
24a1dbabc8 | ||
|
|
f94a437d9d | ||
|
|
27ef344f2b | ||
|
|
ad15797925 | ||
|
|
87b4f2a79d | ||
|
|
c2b911a0ec | ||
|
|
d3b7aaa3fc | ||
|
|
d4828ccd23 | ||
|
|
ab232ebb09 | ||
|
|
fd6f3961f8 | ||
|
|
7d4dde57d9 | ||
|
|
c7a553a7fb | ||
|
|
57f8649eac | ||
|
|
5b18acdcc9 | ||
|
|
962aa93ec7 | ||
|
|
d787d545d2 | ||
|
|
1e96fbe4a8 | ||
|
|
6597e85562 | ||
|
|
617e8a4f8c | ||
|
|
7cf3911cb8 | ||
|
|
ebae62d7c4 | ||
|
|
04d24bde20 | ||
|
|
3860164101 | ||
|
|
e32090a163 | ||
|
|
73ddb79613 | ||
|
|
9d67273740 | ||
|
|
f8b1db2d0d | ||
|
|
af567e7d54 | ||
|
|
e0e0147003 | ||
|
|
fdf0395e49 | ||
|
|
3a15e98155 | ||
|
|
11040eae16 | ||
|
|
6202b46f2a | ||
|
|
55320ca1b8 | ||
|
|
cac3520882 | ||
|
|
4a8d751cff | ||
|
|
d0cef550a3 | ||
|
|
43f4d46cb3 | ||
|
|
6dff9e55be | ||
|
|
44bcdeeb77 | ||
|
|
f9fe805abe | ||
|
|
864f2da733 | ||
|
|
813e3cf14d | ||
|
|
cbe5199c42 | ||
|
|
88bf630798 | ||
|
|
de4a5156e6 | ||
|
|
8fd0407b3a | ||
|
|
d0abd9510e | ||
|
|
0871df60a3 | ||
|
|
151fc3b7c0 | ||
|
|
90c336026e | ||
|
|
eca9e10bc0 | ||
|
|
803869d6ff | ||
|
|
2b0464c3a9 | ||
|
|
b373d8e184 | ||
|
|
174d2528b1 | ||
|
|
91bcba0343 | ||
|
|
a3168a398c | ||
|
|
2c38266536 | ||
|
|
b72437494b | ||
|
|
fa40847263 | ||
|
|
16e4bd5d58 | ||
|
|
9b468d9577 | ||
|
|
c033a81b50 | ||
|
|
9d24798b38 | ||
|
|
f4735e72e4 | ||
|
|
9b3e080098 | ||
|
|
ad4b429633 | ||
|
|
0688e6ef01 | ||
|
|
17f5a9d2a2 | ||
|
|
1838fcc7b0 | ||
|
|
5031bfc395 | ||
|
|
07446082c8 | ||
|
|
eaab2fbc4b | ||
|
|
7174b6ec78 | ||
|
|
3d900d4cad | ||
|
|
eba793fa1f | ||
|
|
be5920b3e9 | ||
|
|
a5d361e3ea | ||
|
|
8525f7bb02 | ||
|
|
5bb74e6562 | ||
|
|
3283b811eb | ||
|
|
257a192095 | ||
|
|
c92c788c85 | ||
|
|
c200eeeb61 | ||
|
|
8f128b2b13 | ||
|
|
9f16874a53 | ||
|
|
cb30330800 | ||
|
|
64f372fae2 | ||
|
|
0f88851e92 | ||
|
|
72ede78ebb | ||
|
|
267b5cea14 | ||
|
|
eb88d58e6c | ||
|
|
1c0ed3433e | ||
|
|
eb0a3ff1af | ||
|
|
af6dd192b3 | ||
|
|
a5142d18cb | ||
|
|
e86710ce11 | ||
|
|
4842f96e2d | ||
|
|
5431f235db | ||
|
|
c996aea40d | ||
|
|
f71444c756 | ||
|
|
34e56fea0b | ||
|
|
2556733787 | ||
|
|
a1f753c8e3 | ||
|
|
edc961cc66 | ||
|
|
0fecc8c6a0 | ||
|
|
592daf8453 | ||
|
|
ab81ddd1de | ||
|
|
ee185c604a | ||
|
|
5a7786c63f | ||
|
|
45b68febe9 | ||
|
|
691522780f | ||
|
|
efa0077e08 | ||
|
|
804b950562 | ||
|
|
0cbfc91628 | ||
|
|
df43d76e62 | ||
|
|
1efc049863 | ||
|
|
336e957951 | ||
|
|
5aedea7179 | ||
|
|
a175419f84 | ||
|
|
5d2f7ab843 | ||
|
|
4c252d805d | ||
|
|
0b401e1289 | ||
|
|
9c97c26832 | ||
|
|
b47136d332 | ||
|
|
8088be390f | ||
|
|
45c090f3e7 | ||
|
|
de174766f8 | ||
|
|
7a4b40efc5 | ||
|
|
a812818670 | ||
|
|
e79a8d440e | ||
|
|
ff515d0ee4 | ||
|
|
664b2389ca | ||
|
|
76d64590b0 | ||
|
|
cdac2b4ecf | ||
|
|
6cc57e0d0d | ||
|
|
48e413eb28 | ||
|
|
6aa682f564 | ||
|
|
187a0d9b28 | ||
|
|
dd9fc198ce | ||
|
|
2404c4c84f | ||
|
|
632c03de71 | ||
|
|
913970cebf | ||
|
|
036c5f9f31 | ||
|
|
213e155713 | ||
|
|
b298ed5b70 | ||
|
|
f53f94d24d | ||
|
|
dda73e99f2 | ||
|
|
3bd2faff8c | ||
|
|
be73f948d2 | ||
|
|
48c3d20dd4 | ||
|
|
d2699793e0 | ||
|
|
8338d48828 | ||
|
|
517d9bb1f2 | ||
|
|
c4eafddbda | ||
|
|
48392f04fa | ||
|
|
7670d2948d | ||
|
|
798103d4e0 | ||
|
|
dda0320c5c | ||
|
|
d7e716b8f0 | ||
|
|
aa8f43fad9 | ||
|
|
5f11cd5693 | ||
|
|
462580cd7d | ||
|
|
49a81742ef | ||
|
|
4d571dee74 | ||
|
|
a140e70661 | ||
|
|
0758c8794d | ||
|
|
9744284109 | ||
|
|
6d77506cfd | ||
|
|
f1af56fb4e | ||
|
|
12b71200be | ||
|
|
44a5b8e459 | ||
|
|
96e2651fa2 | ||
|
|
a3857fd963 | ||
|
|
8b1d84a6ce | ||
|
|
f534df710e | ||
|
|
a712d9cefb | ||
|
|
c2e16d3c5b | ||
|
|
311ab2c822 | ||
|
|
60176163f1 | ||
|
|
b529350d4a | ||
|
|
a5b5743d71 | ||
|
|
53d35553c6 | ||
|
|
4dc1cef4fe | ||
|
|
658fe1d0c3 | ||
|
|
462399b78b | ||
|
|
94cd357f5b | ||
|
|
e99039d692 | ||
|
|
3e58dee19a | ||
|
|
ec36ac1610 | ||
|
|
53cfb3d53d | ||
|
|
252082192a | ||
|
|
1a6f4efbad | ||
|
|
abd893a2ae | ||
|
|
a1cce74e96 | ||
|
|
78887ff757 | ||
|
|
9f20131311 | ||
|
|
a46e108b83 |
No files matched your search
+2
-2
@@ -497,8 +497,8 @@ STATUS: Working
|
||||
SINCE: 4.0.3
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: snmp
|
||||
PRIMARY MAINTAINER: Boris Lytochkin <lytboris@php.net>, Rasmus Lerdorf <rasmus@php.net>, Pierre-Alain Joye <pajoye@php.net>
|
||||
MAINTENANCE: Maintained
|
||||
PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>, Pierre-Alain Joye <pajoye@php.net>
|
||||
MAINTENANCE: Odd Fixes
|
||||
STATUS: Working
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: sockets
|
||||
|
||||
+1
-5
@@ -13,8 +13,6 @@ all: $(all_targets)
|
||||
|
||||
build-modules: $(PHP_MODULES) $(PHP_ZEND_EX)
|
||||
|
||||
build-binaries: $(PHP_BINARIES)
|
||||
|
||||
libphp$(PHP_MAJOR_VERSION).la: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
|
||||
$(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -rpath $(phptempdir) $(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS) $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@
|
||||
-@$(LIBTOOL) --silent --mode=install cp $@ $(phptempdir)/$@ >/dev/null 2>&1
|
||||
@@ -37,8 +35,6 @@ install-sapi: $(OVERALL_TARGET)
|
||||
fi
|
||||
@$(INSTALL_IT)
|
||||
|
||||
install-binaries: build-binaries $(install_binary_targets)
|
||||
|
||||
install-modules: build-modules
|
||||
@test -d modules && \
|
||||
$(mkinstalldirs) $(INSTALL_ROOT)$(EXTENSION_DIR)
|
||||
@@ -83,7 +79,7 @@ PHP_TEST_SHARED_EXTENSIONS = ` \
|
||||
. $$i; $(top_srcdir)/build/shtool echo -n -- " -d $(ZEND_EXT_TYPE)=$(top_builddir)/modules/$$dlname"; \
|
||||
done; \
|
||||
fi`
|
||||
PHP_DEPRECATED_DIRECTIVES_REGEX = '^(magic_quotes_(gpc|runtime|sybase)?|(zend_)?extension(_debug)?(_ts)?)[\t\ ]*='
|
||||
PHP_DEPRECATED_DIRECTIVES_REGEX = '^(define_syslog_variables|register_(globals|long_arrays)?|safe_mode|magic_quotes_(gpc|runtime|sybase)?|(zend_)?extension(_debug)?(_ts)?)[\t\ ]*='
|
||||
|
||||
test: all
|
||||
-@if test ! -z "$(PHP_EXECUTABLE)" && test -x "$(PHP_EXECUTABLE)"; then \
|
||||
|
||||
@@ -1,829 +1,5 @@
|
||||
PHP NEWS
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
4 Aug 2011, PHP 5.4.0 Alpha 3
|
||||
- Added features:
|
||||
. Short array syntax, see UPGRADING guide for full details (rsky0711 at gmail
|
||||
. com, sebastian.deutsch at 9elements . com, Pierre)
|
||||
. Binary numbers format (0b001010). (Jonah dot Harris at gmail dot com)
|
||||
. Support for Class::{expr}() syntax (Pierrick)
|
||||
|
||||
- Removed features:
|
||||
. Removed magic_quotes_gpc, magic_quotes_runtime and magic_quotes_sybase ini options.
|
||||
get_magic_quotes_gpc, get_magic_quotes_runtime are kept but always return
|
||||
false, set_magic_quotes_runtime raises an E_CORE_ERROR. (Pierrick, Pierre)
|
||||
|
||||
- Changed E_ALL to include E_STRICT. (Stas)
|
||||
|
||||
- Improved core functions
|
||||
. Fixed bug #55124 (recursive mkdir fails with current (dot) directory in path).
|
||||
(Pierre)
|
||||
|
||||
- Improved PHP-FPM SAPI:
|
||||
. Added process.max to control the number of process FPM can fork. FR #55166.
|
||||
(fat)
|
||||
. Dropped restriction of not setting the same value multiple times, the last
|
||||
one holds. (giovanni at giacobbi dot net, fat)
|
||||
|
||||
- SPL extension:
|
||||
. Added missing class_uses(..) as pointed out by #55266 (Stefan)
|
||||
. Fixed bug #55287 (spl_classes() not includes CallbackFilter classes)
|
||||
(sasezaki at gmail dot com, salathe)
|
||||
|
||||
|
||||
14 Jul 2011, PHP 5.4.0 Alpha 2
|
||||
- General improvements:
|
||||
. Zend Signal Handling. (Lucas Nealan,Arnaud Le Blanc,Brian Shire, Ilia)
|
||||
|
||||
- Improved Zend Engine
|
||||
. Improved parse error messages. (Felipe)
|
||||
|
||||
- Improved CLI SAPI:
|
||||
. Added built-in web server that is intended for testing purpose.
|
||||
(Moriyoshi)
|
||||
|
||||
- Improved PHP-FPM SAPI:
|
||||
. Added partial syslog support (on error_log only). FR #52052. (fat)
|
||||
. Lowered default value for Process Manager. FR #54098. (fat)
|
||||
. Enhance security by limiting access to user defined extensions.
|
||||
FR #55181. (fat)
|
||||
|
||||
- Improved core functions:
|
||||
. Changed http_response_code() to be able to set a response code. (Kalle)
|
||||
. Fixed crypt_blowfish handling of 8-bit characters. (Stas) (CVE-2011-2483)
|
||||
. Fixed bug#55084 (Function registered by header_register_callback is
|
||||
called only once per process). (Hannes)
|
||||
|
||||
- Improved DOM extension:
|
||||
. Added the ability to pass options to loadHTML (Chregu, fxmulder at gmail dot com)
|
||||
|
||||
- OpenSSL extension:
|
||||
. Use php's implementation for Windows Crypto API in
|
||||
openssl_random_pseudo_bytes. (Pierre)
|
||||
|
||||
20 Jun 2011, PHP 5.4.0 Alpha 1
|
||||
- autoconf 2.59+ is now supported (and required) for generating the
|
||||
configure script with ./buildconf. Autoconf 2.60+ is desirable
|
||||
otherwise the configure help order may be incorrect. (Rasmus, Chris Jones)
|
||||
|
||||
- Removed legacy features:
|
||||
. break/continue $var syntax. (Dmitry)
|
||||
. Safe mode and all related ini options. (Kalle)
|
||||
. register_globals and register_long_arrays ini options. (Kalle)
|
||||
. import_request_variables(). (Kalle)
|
||||
. allow_call_time_pass_reference. (Pierrick)
|
||||
. define_syslog_variables ini option and its associated function. (Kalle)
|
||||
. highlight.bg ini option. (Kalle)
|
||||
. Session bug compatibility mode (session.bug_compat42 and
|
||||
session.bug_compat_warn ini options). (Kalle)
|
||||
. session_is_registered(), session_register() and session_unregister()
|
||||
functions. (Kalle)
|
||||
. y2k_compliance ini option. (Kalle)
|
||||
|
||||
- Moved extensions to PECL: (Johannes)
|
||||
. ext/sqlite. (Note: the ext/sqlite3 and ext/pdo_sqlite extensions are
|
||||
not affected)
|
||||
|
||||
- Changed $_SERVER['REQUEST_TIME'] to include microsecond precision. (Ilia)
|
||||
- Changed default value of "default_charset" php.ini option from ISO-8859-1 to
|
||||
UTF-8. (Rasmus)
|
||||
- Changed array_combine() to return empty array instead of FALSE when both
|
||||
parameter arrays are empty. FR #34857. (joel.perras@gmail.com)
|
||||
- Changed third parameter of preg_match_all() to optional. FR #53238. (Adam)
|
||||
- Changed silent casting of null/''/false into an Object when adding
|
||||
a property into a warning. (Scott)
|
||||
- <?= is now always available regardless of the short_tags setting (Rasmus)
|
||||
|
||||
- General improvements:
|
||||
. Added multibyte support by default. Previously php had to be compiled
|
||||
with --enable-zend-multibyte. Now it can be enabled or disabled through
|
||||
zend.multibyte directive in php.ini. (Dmitry)
|
||||
. Removed compile time dependency from ext/mbstring (Dmitry)
|
||||
. Added support for Traits. (Stefan)
|
||||
. Added closure $this support back. (Stas)
|
||||
. Added array dereferencing support. (Felipe)
|
||||
. Added indirect method call through array. FR #47160. (Felipe)
|
||||
. Added support for object references in recursive serialize() calls.
|
||||
FR #36424. (Mike)
|
||||
. Added http_response_code() function. FR #52555. (Paul Dragoonis, Kalle)
|
||||
. Added header_register_callback() which is invoked immediately
|
||||
prior to the sending of headers and after default headers have
|
||||
been added. (Scott)
|
||||
. Added DTrace support. (David Soria Parra)
|
||||
. Improved output layer, see README.NEW-OUTPUT-API for internals. (Mike)
|
||||
. Improved unserialize() performance.
|
||||
(galaxy dot mipt at gmail dot com, Kalle)
|
||||
. Improved unix build system to allow building multiple PHP binary SAPIs and
|
||||
one SAPI module the same time. FR #53271, FR #52410. (Jani)
|
||||
. Added optional argument to debug_backtrace() and debug_print_backtrace()
|
||||
to limit the amount of stack frames returned. (Sebastian, Patrick)
|
||||
. Added stream metadata API support and stream_metadata() stream class
|
||||
handler. (Stas)
|
||||
|
||||
- Improved Zend Engine memory usage: (Dmitry)
|
||||
. Replaced zend_function.pass_rest_by_reference by
|
||||
ZEND_ACC_PASS_REST_BY_REFERENCE in zend_function.fn_flags.
|
||||
. Replaced zend_function.return_reference by ZEND_ACC_RETURN_REFERENCE
|
||||
in zend_function.fn_flags.
|
||||
. Removed zend_arg_info.required_num_args as it was only needed for internal
|
||||
functions. Now the first arg_info for internal functions (which has special
|
||||
meaning) is represented by zend_internal_function_info structure.
|
||||
. Moved zend_op_array.size, size_var, size_literal, current_brk_cont,
|
||||
backpatch_count into CG(context) as they are used only during compilation.
|
||||
. Moved zend_op_array.start_op into EG(start_op) as it's used only for
|
||||
'interactive' execution of single top-level op-array.
|
||||
. Replaced zend_op_array.done_pass_two by ZEND_ACC_DONE_PASS_TWO in
|
||||
zend_op_array.fn_flags.
|
||||
. op_array.vars array is trimmed (reallocated) during pass_two.
|
||||
. Replaced zend_class_entry.constants_updated by ZEND_ACC_CONSTANTS_UPDATED
|
||||
in zend_class_entry.ce_flags.
|
||||
. Reduced the size of zend_class_entry by sharing the same memory space
|
||||
by different information for internal and user classes.
|
||||
See zend_class_entry.info union.
|
||||
. Reduced size of temp_variable.
|
||||
|
||||
- Changed the structure of op_array.opcodes. The constant values are moved from
|
||||
opcode operands into a separate literal table. (Dmitry)
|
||||
|
||||
- Improved Zend Engine, performance tweaks and optimizations: (Dmitry)
|
||||
. Inlined most probable code-paths for arithmetic operations directly into
|
||||
executor.
|
||||
. Eliminated unnecessary iterations during request startup/shutdown.
|
||||
. Changed $GLOBALS into a JIT autoglobal, so it's initialized only if used.
|
||||
(this may affect opcode caches!)
|
||||
. Improved performance of @ (silence) operator.
|
||||
. Simplified string offset reading. $str[1][0] is now a legal construct.
|
||||
. Added caches to eliminate repeatable run-time bindings of functions,
|
||||
classes, constants, methods and properties.
|
||||
. Added concept of interned strings. All strings constants known at compile
|
||||
time are allocated in a single copy and never changed.
|
||||
. Added an optimization which saves memory and emalloc/efree calls for empty
|
||||
HashTables. (Stas, Dmitry)
|
||||
. ZEND_RECV now always has IS_CV as its result.
|
||||
. ZEND_CATCH now has to be used only with constant class names.
|
||||
. ZEND_FETCH_DIM_? may fetch array and dimension operands in different order.
|
||||
. Simplified ZEND_FETCH_*_R operations. They can't be used with the
|
||||
EXT_TYPE_UNUSED flag any more. This is a very rare and useless case.
|
||||
ZEND_FREE might be required after them instead.
|
||||
. Split ZEND_RETURN into two new instructions ZEND_RETURN and
|
||||
ZEND_RETURN_BY_REF.
|
||||
. Optimized access to global constants using values with pre-calculated
|
||||
hash_values from the literals table.
|
||||
. Optimized access to static properties using executor specialization.
|
||||
A constant class name may be used as a direct operand of ZEND_FETCH_*
|
||||
instruction without previous ZEND_FETCH_CLASS.
|
||||
. zend_stack and zend_ptr_stack allocation is delayed until actual usage.
|
||||
|
||||
- Improved CLI SAPI: (Johannes, Moriyoshi)
|
||||
. Added command line option --rz <name> which shows information of the
|
||||
named Zend extension. (Johannes)
|
||||
. Interactive readline shell improvements: (Johannes)
|
||||
. Added "cli.pager" php.ini setting to set a pager for output.
|
||||
. Added "cli.prompt" php.ini setting to configure the shell prompt.
|
||||
. Added shortcut #inisetting=value to change ini settings at run-time.
|
||||
. Changed shell not to terminate on fatal errors.
|
||||
. Interactive shell works with shared readline extension. FR #53878.
|
||||
|
||||
- Improved FastCGI SAPI: (Dmitry)
|
||||
. Added apache compatible functions: apache_child_terminate(),
|
||||
getallheaders(), apache_request_headers() and apache_response_headers()
|
||||
. Improved performance of FastCGI request parsing.
|
||||
|
||||
- Improved core functions:
|
||||
. number_format() no longer truncates multibyte decimal points and thousand
|
||||
separators to the first byte. FR #53457. (Adam)
|
||||
. Added hex2bin() function. (Scott)
|
||||
|
||||
- Improved CURL extension:
|
||||
. Added support for CURLOPT_MAX_RECV_SPEED_LARGE and
|
||||
CURLOPT_MAX_SEND_SPEED_LARGE. FR #51815. (Pierrick)
|
||||
|
||||
- Improved Date extension:
|
||||
. Added the + modifier to parseFromFormat to allow trailing text in the
|
||||
string to parse without throwing an error. (Stas, Derick)
|
||||
|
||||
- Improved DBA extension:
|
||||
. Added Tokyo Cabinet abstract DB support. (Michael Maclean)
|
||||
. Added Berkeley DB 5 support. (Johannes, Chris Jones)
|
||||
|
||||
- Improved filesystem functions:
|
||||
. scandir() now accepts SCANDIR_SORT_NONE as a possible sorting_order value.
|
||||
FR #53407. (Adam)
|
||||
|
||||
- Improved HASH extension:
|
||||
. Added Jenkins's one-at-a-time hash support. (Martin Jansen)
|
||||
. Added FNV-1 hash support. (Michael Maclean)
|
||||
. Made Adler32 algorithm faster. FR #53213. (zavasek at yandex dot ru)
|
||||
|
||||
- Improved intl extension:
|
||||
. Added Spoofchecker, allows checking for visibly confusable characters and
|
||||
other security issues. (Scott)
|
||||
|
||||
- Improved JSON extension:
|
||||
. Added JsonSerializable interface. (Sara)
|
||||
. Added JSON_BIGINT_AS_STRING, extended json_decode() sig with $options.
|
||||
(Sara)
|
||||
. Added support for JSON_NUMERIC_CHECK option in json_encode() that converts
|
||||
numeric strings to integers. (Ilia)
|
||||
. Added new json_encode() option JSON_PRETTY_PRINT. FR #44331. (Adam)
|
||||
. Added new json_encode() option JSON_UNESCAPED_SLASHES. FR #49366. (Adam)
|
||||
|
||||
- Improved LDAP extension:
|
||||
. Added paged results support. FR #42060. (ando@OpenLDAP.org,
|
||||
iarenuno@eteo.mondragon.edu, jeanseb@au-fil-du.net, remy.saissy@gmail.com)
|
||||
|
||||
- Improved MySQL extensions:
|
||||
. MySQL: Deprecated mysql_list_dbs(). FR #50667. (Andrey)
|
||||
. mysqlnd: Added named pipes support. FR #48082. (Andrey)
|
||||
. MySQLi: Added iterator support in MySQLi. mysqli_result implements
|
||||
Traversable. (Andrey, Johannes)
|
||||
. PDO_mysql: Removed support for linking with MySQL client libraries older
|
||||
than 4.1. (Johannes)
|
||||
|
||||
- Improved OpenSSL extension:
|
||||
. Added AES support. FR #48632. (yonas dot y at gmail dot com, Pierre)
|
||||
. Added a "no_ticket" SSL context option to disable the SessionTicket TLS
|
||||
extension. FR #53447. (Adam)
|
||||
. Added no padding option to openssl_encrypt()/openssl_decrypt(). (Scott)
|
||||
|
||||
- Improved PDO DB-LIB: (Stanley)
|
||||
. Added nextRowset support.
|
||||
. Fixed bug #50755 (PDO DBLIB Fails with OOM).
|
||||
|
||||
- Improved PostgreSQL extension:
|
||||
. Added support for "extra" parameter for PGNotify().
|
||||
(r dot i dot k at free dot fr, Ilia)
|
||||
|
||||
- Improved Reflection extension: (Johannes)
|
||||
. Added ReflectionExtension::isTemporary() and
|
||||
ReflectionExtension::isPersistent() methods.
|
||||
. Added ReflectionZendExtension class.
|
||||
. Added ReflectionClass::isCloneable(). (Felipe)
|
||||
|
||||
- Improved Session extension:
|
||||
. Added support for storing upload progress feedback in session data. (Arnaud)
|
||||
. Changed session.entropy_file to default to /dev/urandom or /dev/arandom if
|
||||
either is present at compile time. (Rasmus)
|
||||
|
||||
- Improved SPL extension:
|
||||
. Added RegexIterator::getRegex() method. (Joshua Thijssen)
|
||||
. Added SplObjectStorage::getHash() hook. (Etienne)
|
||||
. Added CallbackFilterIterator and RecursiveCallbackFilterIterator. (Arnaud)
|
||||
|
||||
- Improved XSL extension:
|
||||
. Added XsltProcessor::setSecurityPrefs($options) and getSecurityPrefs() to
|
||||
define forbidden operations within XSLT stylesheets, default is not to
|
||||
enable write operations from XSLT. Bug #54446 (Chregu, Nicolas Gregoire)
|
||||
|
||||
- Improved ZLIB extension:
|
||||
. Re-implemented non-file related functionality. (Mike)
|
||||
|
||||
- Improved SNMP extension (Boris Lytochkin):
|
||||
. Added OO API. FR #53594 (php-snmp rewrite).
|
||||
. Sanitized return values of existing functions. Now it returns FALSE on
|
||||
failure.
|
||||
. Allow ~infinite OIDs in GET/GETNEXT/SET queries. Autochunk them to max_oids
|
||||
upon request.
|
||||
. Introducing unit tests for extension with ~full coverage.
|
||||
. Way of representing OID value can now be changed when SNMP_VALUE_OBJECT
|
||||
is used for value output mode. Use or'ed SNMP_VALUE_LIBRARY(default if
|
||||
not specified) or SNMP_VALUE_PLAIN. (FR #54502)
|
||||
. Fixed bugs
|
||||
. #44193 (snmp v3 noAuthNoPriv doesn't work)
|
||||
. #45893 (Snmp buffer limited to 2048 char)
|
||||
. #46065 (snmp_set_quick_print() persists between requests)
|
||||
. #51336 (snmprealwalk (snmp v1) does not handle end of OID tree correctly)
|
||||
. #53862 (snmp_set_oid_output_format does not allow returning to default)
|
||||
|
||||
## UNSORTED ##
|
||||
|
||||
- Fixed PDO objects binary incompatibility. (Dmitry)
|
||||
- Fixed bug #52211 (iconv() returns part of string on error). (Felipe)
|
||||
|
||||
28 Jul 2011, PHP 5.3.7 RC4
|
||||
- Improved core functions:
|
||||
. Updated crypt_blowfish to 1.2. ((CVE-2011-2483) (Solar Designer)
|
||||
|
||||
- OpenSSL
|
||||
. openssl_encrypt()/openssl_decrypt() truncated keys of variable length
|
||||
ciphers to the OpenSSL default for the algorithm. (Scott)
|
||||
. On blocking SSL sockets respect the timeout option where possible.
|
||||
(Scott)
|
||||
|
||||
- Core
|
||||
. Fixed bug #55339 (Segfault with allow_call_time_pass_reference = Off).
|
||||
(Dmitry)
|
||||
. Fix bug #55295 [NEW]: popen_ex on windows, fixed possible heap overflow
|
||||
(Pierre)
|
||||
. Fixed bug #50816 (Using class constants in array definition fails).
|
||||
(Pierrick, Dmitry)
|
||||
|
||||
14 Jul 2011, PHP 5.3.7 RC3
|
||||
- Zend Engine:
|
||||
. Fixed bug #55156 (ReflectionClass::getDocComment() returns comment even
|
||||
though the class has none). (Felipe)
|
||||
|
||||
- Core
|
||||
. Removed warning when argument of is_a() or is_subclass_of() is not
|
||||
a known class. (Stas)
|
||||
. Fixed bug #55258 (Windows Version Detecting Error).
|
||||
( xiaomao5 at live dot com, Pierre)
|
||||
. Fixed bug #55187 (readlink returns weird characters when false result).
|
||||
(Pierre)
|
||||
. Fixed bug #55014 (Compile failure due to improper use of ctime_r()). (Ilia)
|
||||
. Fixed bug #54332 (Crash in zend_mm_check_ptr // Heap corruption). (Dmitry)
|
||||
. Fixed bug #54204 (Can't set a value with a PATH section in php.ini).
|
||||
(Pierre)
|
||||
. Fixed bug #54305 (Crash in gc_remove_zval_from_buffer). (Dmitry)
|
||||
. Fixed bug #53727 (Inconsistent behavior of is_subclass_of with interfaces)
|
||||
(Ralph Schindler, Dmitry)
|
||||
. Fixed buffer overflow on overlog salt in crypt(). (Clément LECIGNE, Stas)
|
||||
. Fixed bug #52935 (call exit in user_error_handler cause stream relate
|
||||
core). (Gustavo)
|
||||
|
||||
|
||||
- MCrypt
|
||||
. Change E_ERROR to E_WARNING in mcrypt_create_iv when not enough data
|
||||
has been fetched (Windows). (Pierre)
|
||||
. Fixed bug #55169 (mcrypt_create_iv always fails to gather sufficient random
|
||||
data on Windows). (Pierre)
|
||||
|
||||
- PDO DBlib:
|
||||
. Fixed bug #54329 (MSSql extension memory leak).
|
||||
(dotslashpok at gmail dot com)
|
||||
|
||||
30 Jun 2011, PHP 5.3.7 RC2
|
||||
- Core:
|
||||
. Fixed crash in error_log(). (Felipe) Reported by Mateusz Kocielski.
|
||||
. Fixed bug #55082 (var_export() doesn't escape properties properly).
|
||||
(Gustavo)
|
||||
|
||||
- DateTime extension:
|
||||
. Fixed bug where the DateTime object got changed while using date_diff().
|
||||
(Derick)
|
||||
|
||||
- DBA extension:
|
||||
. Supress warning on non-existent file open with Berkeley DB 5.2 (Chris Jones)
|
||||
|
||||
- PDO ODBC driver:
|
||||
. Fixed data type usage in 64bit. (leocsilva at gmail dot com)
|
||||
|
||||
- PHP-FPM SAPI:
|
||||
. Implemented FR #54499 (FPM ping and status_path should handle HEAD request). (fat)
|
||||
. Implemented FR #54172 (Overriding the pid file location of php-fpm). (fat)
|
||||
. Fixed missing Expires and Cache-Control headers for ping and status pages.
|
||||
(fat)
|
||||
. Fixed memory leak. (fat) Reported and fixed by Giovanni Giacobbi.
|
||||
. Fixed wrong value of log_level when invoking fpm with -tt. (fat)
|
||||
|
||||
- SPL extension:
|
||||
. Fixed bug #54971 (Wrong result when using iterator_to_array with use_keys
|
||||
on true). (Pierrick)
|
||||
|
||||
16 Jun 2011, PHP 5.3.7 RC1
|
||||
- Upgraded bundled SQLite to version 3.7.6.3. (Scott)
|
||||
- Upgraded bundled PCRE to version 8.12. (Scott)
|
||||
- Increased the backtrack limit from 100000 to 1000000 (Rasmus)
|
||||
|
||||
- Zend Engine:
|
||||
. Fixed bug #55007 (compiler fail after previous fail). (Felipe)
|
||||
. Fixed bug #54910 (Crash when calling call_user_func with unknown function
|
||||
name). (Dmitry)
|
||||
. Fixed bug #54804 (__halt_compiler and imported namespaces).
|
||||
(Pierrick, Felipe)
|
||||
. Fixed bug #54624 (class_alias and type hint). (Felipe)
|
||||
. Fixed bug #54585 (track_errors causes segfault). (Dmitry)
|
||||
. Fixed bug #54423 (classes from dl()'ed extensions are not destroyed).
|
||||
(Tony, Dmitry)
|
||||
. Fixed bug #54372 (Crash accessing global object itself returned from its
|
||||
__get() handle). (Dmitry)
|
||||
. Fixed bug #54358 (Closure, use and reference). (Dmitry)
|
||||
. Fixed bug #54367 (Use of closure causes problem in ArrayAccess). (Dmitry)
|
||||
. Fixed bug #54039 (use() of static variables in lambda functions can break
|
||||
staticness). (Dmitry)
|
||||
. Fixed bug #54262 (Crash when assigning value to a dimension in a non-array).
|
||||
(Dmitry)
|
||||
|
||||
- Core:
|
||||
. Implemented FR #54459 (Range function accuracy). (Adam)
|
||||
. Added PHP_MANDIR constant telling where the manpages were installed into,
|
||||
and an --man-dir argument to php-config. (Hannes)
|
||||
|
||||
. Fixed a crash inside dtor for error handling. (Ilia)
|
||||
. Fixed bug #54939 (File path injection vulnerability in RFC1867 File upload
|
||||
filename). (Felipe) Reported by Krzysztof Kotowicz. (CVE-2011-2202)
|
||||
|
||||
. Fixed bug #54935 php_win_err can lead to crash. (Pierre)
|
||||
. Fixed bug #54924 (assert.* is not being reset upon request shutdown). (Ilia)
|
||||
. Fixed bug #54895 (Fix compiling with older gcc version without need for
|
||||
membar_producer macro). (mhei at heimpold dot de)
|
||||
. Fixed bug #54723 (getimagesize() doesn't check the full ico signature).
|
||||
(Scott)
|
||||
. Fixed bug #54580 (get_browser() segmentation fault when browscap ini
|
||||
directive is set through php_admin_value). (Gustavo)
|
||||
. Fixed bug #54238 (use-after-free in substr_replace()). (Stas)
|
||||
(CVE-2011-1148)
|
||||
. Fixed bug #54180 (parse_url() incorrectly parses path when ? in fragment).
|
||||
(tomas dot brastavicius at quantum dot lt, Pierrick)
|
||||
. Fixed bug #54137 (file_get_contents POST request sends additional line
|
||||
break). (maurice-php at mertinkat dot net, Ilia)
|
||||
. Fixed bug #54866 (incorrect accounting for realpath_cache_size).
|
||||
(Dustin Ward)
|
||||
. Fixed bug #54721 (Different Hashes on Windows, BSD and Linux on wrong Salt
|
||||
size). (Pierre, os at irj dot ru)
|
||||
. Fixed bug #53848 (fgetcsv() ignores spaces at beginnings of fields). (Ilia)
|
||||
. Alternative fix for bug #52550, as applied to the round() function (signed
|
||||
overflow), as the old fix impacted the algorithm for numbers with magnitude
|
||||
smaller than 0. (Gustavo)
|
||||
. Fixed bug #51997 (SEEK_CUR with 0 value, returns a warning). (Ilia)
|
||||
. Fixed bug #50363 (Invalid parsing in convert.quoted-printable-decode
|
||||
filter). (slusarz at curecanti dot org)
|
||||
. Fixed bug #48465 (sys_get_temp_dir() possibly inconsistent when using
|
||||
TMPDIR on Windows). (Pierre)
|
||||
|
||||
- Apache2 Handler SAPI:
|
||||
. Fixed bug #54529 (SAPI crashes on apache_config.c:197).
|
||||
(hebergement at riastudio dot fr)
|
||||
|
||||
- CLI SAPI:
|
||||
. Fixed bug #52496 (Zero exit code on option parsing failure). (Ilia)
|
||||
|
||||
- cURL:
|
||||
. Added ini option curl.cainfo (support for custom cert db). (Pierre)
|
||||
. Added CURLINFO_REDIRECT_URL support. (Daniel Stenberg, Pierre)
|
||||
. Added support for CURLOPT_MAX_RECV_SPEED_LARGE and
|
||||
CURLOPT_MAX_SEND_SPEED_LARGE. FR #51815. (Pierrick)
|
||||
|
||||
- DateTime extension:
|
||||
. Fixed bug #54340 (DateTime::add() method bug). (Adam)
|
||||
. Fixed bug #54316 (DateTime::createFromFormat does not handle trailing '|'
|
||||
correctly). (Adam)
|
||||
. Fixed bug #54283 (new DatePeriod(NULL) causes crash). (Felipe)
|
||||
. Fixed bug #51819 (Case discrepancy in timezone names cause Uncaught
|
||||
exception and fatal error). (Hannes)
|
||||
|
||||
- DBA extension:
|
||||
. Fixed bug #54242 (dba_insert returns true if key already exists). (Felipe)
|
||||
|
||||
- Exif extesion:
|
||||
. Fixed bug #54121 (error message format string typo). (Ilia)
|
||||
|
||||
- Fileinfo extension:
|
||||
. Fixed bug #54934 (Unresolved symbol strtoull in HP-UX 11.11). (Felipe)
|
||||
|
||||
- Filter extension:
|
||||
. Added 3rd parameter to filter_var_array() and filter_input_array()
|
||||
functions that allows disabling addition of empty elements. (Ilia)
|
||||
. Fixed bug #53037 (FILTER_FLAG_EMPTY_STRING_NULL is not implemented). (Ilia)
|
||||
|
||||
- Interbase extension:
|
||||
. Fixed bug #54269 (Short exception message buffer causes crash). (Felipe)
|
||||
|
||||
- intl extension:
|
||||
. Implemented FR #54540 (Allow loading of arbitrary resource bundles when
|
||||
fallback is disabled). (David Zuelke, Stas)
|
||||
. Implemented FR #54561 (Expose ICU version info). (David Zuelke, Ilia)
|
||||
|
||||
- json extension:
|
||||
. Fixed bug #54484 (Empty string in json_decode doesn't reset
|
||||
json_last_error()). (Ilia)
|
||||
|
||||
- LDAP extension:
|
||||
. Fixed bug #53339 (Fails to build when compilng with gcc 4.5 and DSO
|
||||
libraries). (Clint Byrum, Raphael)
|
||||
|
||||
- libxml extension:
|
||||
. Fixed bug #54601 (Removing the doctype node segfaults). (Hannes)
|
||||
. Fixed bug #54440 (libxml extension ignores default context). (Gustavo)
|
||||
|
||||
- mbstring extension:
|
||||
. Fixed bug #54494 (mb_substr() mishandles UTF-32LE and UCS-2LE). (Gustavo)
|
||||
|
||||
- MySQL Improved extension:
|
||||
. Fixed Bug #54221 (mysqli::get_warnings segfault when used in multi queries).
|
||||
(Andrey)
|
||||
|
||||
- mysqlnd
|
||||
. Fixed crash when using more than 28,000 bound parameters. Workaround is to
|
||||
set mysqlnd.net_cmd_buffer_size to at least 9000. (Andrey)
|
||||
. Fixed bug #54674 mysqlnd valid_sjis_(head|tail) is using invalid operator
|
||||
and range). (nihen at megabbs dot com, Andrey)
|
||||
|
||||
- OpenSSL extension
|
||||
. Fixed bug #54992 (Stream not closed and error not returned when SSL
|
||||
CN_match fails). (Gustavo, laird_ngrps at dodo dot com dot au)
|
||||
|
||||
- Oracle Database extension (OCI8):
|
||||
. Added oci_client_version() returning the runtime Oracle client library
|
||||
version (Chris Jones)
|
||||
|
||||
- PDO extension:
|
||||
. Fixed bug #54929 (Parse error with single quote in sql comment). (Felipe)
|
||||
. Fixed bug #52104 (bindColumn creates Warning regardless of ATTR_ERRMODE
|
||||
settings). (Ilia)
|
||||
|
||||
- PDO DBlib driver:
|
||||
. Fixed bug #54167 (PDO_DBLIB returns null on SQLUNIQUE field).
|
||||
(mjh at hodginsmedia dot com, Felipe)
|
||||
|
||||
- PDO MySQL driver:
|
||||
. Fixed bug #54644 (wrong pathes in php_pdo_mysql_int.h). (Tony, Johannes)
|
||||
. Fixed bug #53782 (foreach throws irrelevant exception). (Johannes, Andrey)
|
||||
. Implemented FR #48587 (MySQL PDO driver doesn't support SSL connections).
|
||||
(Rob)
|
||||
|
||||
- PDO PostgreSQL driver:
|
||||
. Fixed bug #54318 (Non-portable grep option used in PDO pgsql
|
||||
configuration). (bwalton at artsci dot utoronto dot ca)
|
||||
|
||||
- PDO Oracle driver:
|
||||
. Fixed bug #44989 (64bit Oracle RPMs still not supported by pdo-oci).
|
||||
(jbnance at tresgeek dot net)
|
||||
|
||||
- Phar extension:
|
||||
. Fixed bug #54395 (Phar::mount() crashes when calling with wrong parameters).
|
||||
(Felipe)
|
||||
|
||||
- PHP-FPM SAPI:
|
||||
. Added xml format to the status page. (fat)
|
||||
. Removed timestamp in logs written by children processes. (fat)
|
||||
. Fixed exit at FPM startup on fpm_resources_prepare() errors. (fat)
|
||||
. Added master rlimit_files and rlimit_core in the global configuration
|
||||
settings. (fat)
|
||||
. Removed pid in debug logs written by chrildren processes. (fat)
|
||||
. Added custom access log (also added per request %CPU and memory
|
||||
mesurement). (fat)
|
||||
. Added a real scoreboard and several improvements to the status page. (fat)
|
||||
|
||||
- Reflection extension:
|
||||
. Fixed bug #54347 (reflection_extension does not lowercase module function
|
||||
name). (Felipe, laruence at yahoo dot com dot cn)
|
||||
|
||||
- SOAP extension:
|
||||
. Fixed bug #54312 (soap_version logic bug). (tom at samplonius dot org)
|
||||
|
||||
- Sockets extension:
|
||||
. Fixed stack buffer overflow in socket_connect(). (CVE-2011-1938)
|
||||
Found by Mateusz Kocielski, Marek Kroemeke and Filip Palian. (Felipe)
|
||||
. Changed socket_set_block() and socket_set_nonblock() so they emit warnings
|
||||
on error. (Gustavo)
|
||||
. Fixed bug #51958 (socket_accept() fails on IPv6 server sockets). (Gustavo)
|
||||
|
||||
- SPL extension:
|
||||
. Fixed bug #54970 (SplFixedArray::setSize() isn't resizing). (Felipe)
|
||||
. Fixed bug #54609 (Certain implementation(s) of SplFixedArray cause hard
|
||||
crash). (Felipe)
|
||||
. Fixed bug #54384 (Dual iterators, GlobIterator, SplFileObject and
|
||||
SplTempFileObject crash when user-space classes don't call the paren
|
||||
constructor). (Gustavo)
|
||||
. Fixed bug #54292 (Wrong parameter causes crash in
|
||||
SplFileObject::__construct()). (Felipe)
|
||||
. Fixed bug #54291 (Crash iterating DirectoryIterator for dir name starting
|
||||
with \0). (Gustavo)
|
||||
. Fixed bug #54281 (Crash in non-initialized RecursiveIteratorIterator).
|
||||
(Felipe)
|
||||
|
||||
- Streams:
|
||||
. Fixed bug #54946 (stream_get_contents infinite loop). (Hannes)
|
||||
. Fixed bug #54623 (Segfault when writing to a persistent socket after
|
||||
closing a copy of the socket). (Gustavo)
|
||||
|
||||
. Zip extension:
|
||||
. Fixed bug #54681 (addGlob() crashes on invalid flags). (Felipe)
|
||||
|
||||
17 Mar 2011, PHP 5.3.6
|
||||
- Upgraded bundled Sqlite3 to version 3.7.4. (Ilia)
|
||||
- Upgraded bundled PCRE to version 8.11. (Ilia)
|
||||
|
||||
- Zend Engine:
|
||||
. Indirect reference to $this fails to resolve if direct $this is never used
|
||||
in method. (Scott)
|
||||
. Added options to debug backtrace functions. (Stas)
|
||||
. Fixed bug numerous crashes due to setlocale (crash on error, pcre, mysql
|
||||
etc.) on Windows in thread safe mode. (Pierre)
|
||||
. Fixed Bug #53971 (isset() and empty() produce apparently spurious runtime
|
||||
error). (Dmitry)
|
||||
. Fixed Bug #53958 (Closures can't 'use' shared variables by value and by
|
||||
reference). (Dmitry)
|
||||
. Fixed Bug #53629 (memory leak inside highlight_string()). (Hannes, Ilia)
|
||||
. Fixed Bug #51458 (Lack of error context with nested exceptions). (Stas)
|
||||
. Fixed Bug #47143 (Throwing an exception in a destructor causes a fatal
|
||||
error). (Stas)
|
||||
. Fixed bug #43512 (same parameter name can be used multiple times in
|
||||
method/function definition). (Felipe)
|
||||
|
||||
- Core:
|
||||
. Added ability to connect to HTTPS sites through proxy with basic
|
||||
authentication using stream_context/http/header/Proxy-Authorization (Dmitry)
|
||||
. Changed default value of ini directive serialize_precision from 100 to 17.
|
||||
(Gustavo)
|
||||
. Fixed bug #54055 (buffer overrun with high values for precision ini
|
||||
setting). (Gustavo)
|
||||
. Fixed bug #53959 (reflection data for fgetcsv out-of-date). (Richard)
|
||||
. Fixed bug #53577 (Regression introduced in 5.3.4 in open_basedir with a
|
||||
trailing forward slash). (lekensteyn at gmail dot com, Pierre)
|
||||
. Fixed bug #53682 (Fix compile on the VAX). (Rasmus, jklos)
|
||||
. Fixed bug #48484 (array_product() always returns 0 for an empty array).
|
||||
(Ilia)
|
||||
. Fixed bug #48607 (fwrite() doesn't check reply from ftp server before
|
||||
exiting). (Ilia)
|
||||
|
||||
|
||||
- Calendar extension:
|
||||
. Fixed bug #53574 (Integer overflow in SdnToJulian, sometimes leading to
|
||||
segfault). (Gustavo)
|
||||
|
||||
- DOM extension:
|
||||
. Implemented FR #39771 (Made DOMDocument::saveHTML accept an optional DOMNode
|
||||
like DOMDocument::saveXML). (Gustavo)
|
||||
|
||||
- DateTime extension:
|
||||
. Fixed a bug in DateTime->modify() where absolute date/time statements had
|
||||
no effect. (Derick)
|
||||
. Fixed bug #53729 (DatePeriod fails to initialize recurrences on 64bit
|
||||
big-endian systems). (Derick, rein@basefarm.no)
|
||||
. Fixed bug #52808 (Segfault when specifying interval as two dates). (Stas)
|
||||
. Fixed bug #52738 (Can't use new properties in class extended from
|
||||
DateInterval). (Stas)
|
||||
. Fixed bug #52290 (setDate, setISODate, setTime works wrong when DateTime
|
||||
created from timestamp). (Stas)
|
||||
. Fixed bug #52063 (DateTime constructor's second argument doesn't have a
|
||||
null default value). (Gustavo, Stas)
|
||||
|
||||
- Exif extension:
|
||||
. Fixed bug #54002 (crash on crafted tag, reported by Luca Carettoni).
|
||||
(Pierre) (CVE-2011-0708)
|
||||
|
||||
- Filter extension:
|
||||
. Fixed bug #53924 (FILTER_VALIDATE_URL doesn't validate port number).
|
||||
(Ilia, Gustavo)
|
||||
. Fixed bug #53150 (FILTER_FLAG_NO_RES_RANGE is missing some IP ranges).
|
||||
(Ilia)
|
||||
. Fixed bug #52209 (INPUT_ENV returns NULL for set variables (CLI)). (Ilia)
|
||||
. Fixed bug #47435 (FILTER_FLAG_NO_RES_RANGE don't work with ipv6).
|
||||
(Ilia, valli at icsurselva dot ch)
|
||||
|
||||
- Fileinfo extension:
|
||||
. Fixed bug #54016 (finfo_file() Cannot determine filetype in archives).
|
||||
(Hannes)
|
||||
|
||||
- Gettext
|
||||
. Fixed bug #53837 (_() crashes on Windows when no LANG or LANGUAGE
|
||||
environment variable are set). (Pierre)
|
||||
|
||||
- IMAP extension:
|
||||
. Implemented FR #53812 (get MIME headers of the part of the email). (Stas)
|
||||
. Fixed bug #53377 (imap_mime_header_decode() doesn't ignore \t during long
|
||||
MIME header unfolding). (Adam)
|
||||
|
||||
- Intl extension:
|
||||
. Fixed bug #53612 (Segmentation fault when using cloned several intl
|
||||
objects). (Gustavo)
|
||||
. Fixed bug #53512 (NumberFormatter::setSymbol crash on bogus $attr values).
|
||||
(Felipe)
|
||||
. Implemented clone functionality for number, date & message formatters.
|
||||
(Stas).
|
||||
|
||||
- JSON extension:
|
||||
. Fixed bug #53963 (Ensure error_code is always set during some failed
|
||||
decodings). (Scott)
|
||||
|
||||
- mysqlnd
|
||||
. Fixed problem with always returning 0 as num_rows for unbuffered sets.
|
||||
(Andrey, Ulf)
|
||||
|
||||
- MySQL Improved extension:
|
||||
. Added 'db' and 'catalog' keys to the field fetching functions (FR #39847).
|
||||
(Kalle)
|
||||
. Fixed buggy counting of affected rows when using the text protocol. The
|
||||
collected statistics were wrong when multi_query was used with mysqlnd
|
||||
(Andrey)
|
||||
. Fixed bug #53795 (Connect Error from MySqli (mysqlnd) when using SSL).
|
||||
(Kalle)
|
||||
. Fixed bug #53503 (mysqli::query returns false after successful LOAD DATA
|
||||
query). (Kalle, Andrey)
|
||||
. Fixed bug #53425 (mysqli_real_connect() ignores client flags when built to
|
||||
call libmysql). (Kalle, tre-php-net at crushedhat dot com)
|
||||
|
||||
- OpenSSL extension:
|
||||
. Fixed stream_socket_enable_crypto() not honoring the socket timeout in
|
||||
server mode. (Gustavo)
|
||||
. Fixed bug #54060 (Memory leaks when openssl_encrypt). (Pierre)
|
||||
. Fixed bug #54061 (Memory leaks when openssl_decrypt). (Pierre)
|
||||
. Fixed bug #53592 (stream_socket_enable_crypto() busy-waits in client mode).
|
||||
(Gustavo)
|
||||
. Implemented FR #53447 (Cannot disable SessionTicket extension for servers
|
||||
that do not support it) by adding a no_ticket SSL context option. (Adam,
|
||||
Tony)
|
||||
|
||||
- PDO MySQL driver:
|
||||
. Fixed bug #53551 (PDOStatement execute segfaults for pdo_mysql driver).
|
||||
(Johannes)
|
||||
. Implemented FR #47802 (Support for setting character sets in DSN strings).
|
||||
(Kalle)
|
||||
|
||||
- PDO Oracle driver:
|
||||
. Fixed bug #39199 (Cannot load Lob data with more than 4000 bytes on
|
||||
ORACLE 10). (spatar at mail dot nnov dot ru)
|
||||
|
||||
- PDO PostgreSQL driver:
|
||||
. Fixed bug #53517 (segfault in pgsql_stmt_execute() when postgres is down).
|
||||
(gyp at balabit dot hu)
|
||||
|
||||
- Phar extension:
|
||||
. Fixed bug #54247 (format-string vulnerability on Phar). (Felipe)
|
||||
(CVE-2011-1153)
|
||||
. Fixed bug #53541 (format string bug in ext/phar).
|
||||
(crrodriguez at opensuse dot org, Ilia)
|
||||
. Fixed bug #53898 (PHAR reports invalid error message, when the directory
|
||||
does not exist). (Ilia)
|
||||
|
||||
- PHP-FPM SAPI:
|
||||
. Enforce security in the fastcgi protocol parsing.
|
||||
(ef-lists at email dotde)
|
||||
. Fixed bug #53777 (php-fpm log format now match php_error log format). (fat)
|
||||
. Fixed bug #53527 (php-fpm --test doesn't set a valuable return value). (fat)
|
||||
. Fixed bug #53434 (php-fpm slowlog now also logs the original request). (fat)
|
||||
|
||||
- Readline extension:
|
||||
. Fixed bug #53630 (Fixed parameter handling inside readline() function).
|
||||
(jo at feuersee dot de, Ilia)
|
||||
|
||||
- Reflection extension:
|
||||
. Fixed bug #53915 (ReflectionClass::getConstant(s) emits fatal error on
|
||||
constants with self::). (Gustavo)
|
||||
|
||||
- Shmop extension:
|
||||
. Fixed bug #54193 (Integer overflow in shmop_read()). (Felipe)
|
||||
Reported by Jose Carlos Norte <jose at eyeos dot org> (CVE-2011-1092)
|
||||
|
||||
- SNMP extension:
|
||||
. Fixed bug #51336 (snmprealwalk (snmp v1) does not handle end of OID tree
|
||||
correctly). (Boris Lytochkin)
|
||||
|
||||
- SOAP extension:
|
||||
. Fixed possible crash introduced by the NULL poisoning patch.
|
||||
(Mateusz Kocielski, Pierre)
|
||||
|
||||
- SPL extension:
|
||||
. Fixed memory leak in DirectoryIterator::getExtension() and
|
||||
SplFileInfo::getExtension(). (Felipe)
|
||||
. Fixed bug #53914 (SPL assumes HAVE_GLOB is defined). (Chris Jones)
|
||||
. Fixed bug #53515 (property_exists incorrect on ArrayObject null and 0
|
||||
values). (Felipe)
|
||||
. Fixed bug #49608 (Using CachingIterator on DirectoryIterator instance
|
||||
segfaults). (Felipe)
|
||||
|
||||
. Added SplFileInfo::getExtension(). FR #48767. (Peter Cowburn)
|
||||
|
||||
- SQLite3 extension:
|
||||
. Fixed memory leaked introduced by the NULL poisoning patch.
|
||||
(Mateusz Kocielski, Pierre)
|
||||
. Fixed memory leak on SQLite3Result and SQLite3Stmt when assigning to a
|
||||
reference. (Felipe)
|
||||
. Add SQlite3_Stmt::readonly() for checking if a statement is read only.
|
||||
(Scott)
|
||||
. Implemented FR #53466 (SQLite3Result::columnType() should return false after
|
||||
all of the rows have been fetched). (Scott)
|
||||
|
||||
- Streams:
|
||||
. Fixed bug #54092 (Segmentation fault when using HTTP proxy with the FTP
|
||||
wrapper). (Gustavo)
|
||||
. Fixed bug #53913 (Streams functions assume HAVE_GLOB is defined). (Chris
|
||||
Jones)
|
||||
. Fixed bug #53903 (userspace stream stat callback does not separate the
|
||||
elements of the returned array before converting them). (Gustavo)
|
||||
. Implemented FR #26158 (open arbitrary file descriptor with fopen). (Gustavo)
|
||||
|
||||
- Tokenizer Extension
|
||||
. Fixed bug #54089 (token_get_all() does not stop after __halt_compiler).
|
||||
(Ilia)
|
||||
|
||||
- XSL extension:
|
||||
. Fixed memory leaked introduced by the NULL poisoning patch.
|
||||
(Mateusz Kocielski, Pierre)
|
||||
|
||||
- Zip extension:
|
||||
. Added the filename into the return value of stream_get_meta_data(). (Hannes)
|
||||
. Fixed bug #53923 (Zip functions assume HAVE_GLOB is defined). (Adam)
|
||||
. Fixed bug #53893 (Wrong return value for ZipArchive::extractTo()). (Pierre)
|
||||
. Fixed bug #53885 (ZipArchive segfault with FL_UNCHANGED on empty archive).
|
||||
(Stas, Maksymilian Arciemowicz). (CVE-2011-0421)
|
||||
. Fixed bug #53854 (Missing constants for compression type). (Richard, Adam)
|
||||
. Fixed bug #53603 (ZipArchive should quiet stat errors). (brad dot froehle at
|
||||
gmail dot com, Gustavo)
|
||||
. Fixed bug #53579 (stream_get_contents() segfaults on ziparchive streams).
|
||||
(Hannes)
|
||||
. Fixed bug #53568 (swapped memset arguments in struct initialization).
|
||||
(crrodriguez at opensuse dot org)
|
||||
. Fixed bug #53166 (Missing parameters in docs and reflection definition).
|
||||
(Richard)
|
||||
. Fixed bug #49072 (feof never returns true for damaged file in zip).
|
||||
(Gustavo, Richard Quadling)
|
||||
|
||||
06 Jan 2011, PHP 5.3.5
|
||||
- Fixed Bug #53632 (infinite loop with x87 fpu). (CVE-2010-4645) (Scott,
|
||||
Rasmus)
|
||||
|
||||
09 Dec 2010, PHP 5.3.4
|
||||
- Upgraded bundled Sqlite3 to version 3.7.3. (Ilia)
|
||||
- Upgraded bundled PCRE to version 8.10. (Ilia)
|
||||
@@ -831,8 +7,7 @@
|
||||
- Security enhancements:
|
||||
. Fixed crash in zip extract method (possible CWE-170).
|
||||
(Maksymilian Arciemowicz, Pierre)
|
||||
. Paths with NULL in them (foo\0bar.txt) are now considered as invalid.
|
||||
(Rasmus)
|
||||
. Paths with NULL in them (foo\0bar.txt) are now considered as invalid. (Rasmus)
|
||||
. Fixed a possible double free in imap extension (Identified by Mateusz
|
||||
Kocielski). (CVE-2010-4150). (Ilia)
|
||||
. Fixed NULL pointer dereference in ZipArchive::getArchiveComment.
|
||||
@@ -859,8 +34,8 @@
|
||||
. Implemented symbolic links support for open_basedir checks. (Pierre)
|
||||
. Implemented FR #51804, SplFileInfo::getLinkTarget on Windows. (Pierre)
|
||||
. Implemented FR #50692, not uploaded files don't count towards
|
||||
max_file_uploads limit. As a side improvement, temporary files are not
|
||||
opened for empty uploads and, in debug mode, 0-length uploads. (Gustavo)
|
||||
max_file_uploads limit. As a side improvement, temporary files are not opened
|
||||
for empty uploads and, in debug mode, 0-length uploads. (Gustavo)
|
||||
|
||||
- Improved MySQLnd:
|
||||
. Added new character sets to mysqlnd, which are available in MySQL 5.5
|
||||
@@ -897,12 +72,12 @@
|
||||
. Fixed bug #53141 (autoload misbehaves if called from closing session).
|
||||
(ladislav at marek dot su)
|
||||
. Fixed bug #53021 (In html_entity_decode, failure to convert numeric entities
|
||||
with ENT_NOQUOTES and ISO-8859-1). Fixed and extended the fix of
|
||||
ENT_NOQUOTES in html_entity_decode that had introduced the bug (rev
|
||||
#185591) to other encodings. Additionaly, html_entity_decode() now doesn't
|
||||
decode " if ENT_NOQUOTES is given. (Gustavo)
|
||||
. Fixed bug #52931 (strripos not overloaded with function overloading
|
||||
enabled). (Felipe)
|
||||
with ENT_NOQUOTES and ISO-8859-1). Fixed and extended the fix of ENT_NOQUOTES
|
||||
in html_entity_decode that had introduced the bug (rev #185591) to other
|
||||
encodings. Additionaly, html_entity_decode() now doesn't decode " if
|
||||
ENT_NOQUOTES is given. (Gustavo)
|
||||
. Fixed bug #52931 (strripos not overloaded with function overloading enabled).
|
||||
(Felipe)
|
||||
. Fixed bug #52772 (var_dump() doesn't check for the existence of
|
||||
get_class_name before calling it). (Kalle, Gustavo)
|
||||
. Fixed bug #52534 (var_export array with negative key). (Felipe)
|
||||
@@ -916,8 +91,7 @@
|
||||
other platforms). (Pierre)
|
||||
. Fixed bug #49687 (utf8_decode vulnerabilities and deficiencies in the number
|
||||
of reported malformed sequences). (CVE-2010-3870) (Gustavo)
|
||||
. Fixed bug #49407 (get_html_translation_table doesn't handle UTF-8).
|
||||
(Gustavo)
|
||||
. Fixed bug #49407 (get_html_translation_table doesn't handle UTF-8). (Gustavo)
|
||||
. Fixed bug #48831 (php -i has different output to php --ini). (Richard,
|
||||
Pierre)
|
||||
. Fixed bug #47643 (array_diff() takes over 3000 times longer than php 5.2.4).
|
||||
@@ -1018,8 +192,8 @@
|
||||
words). (Ilia)
|
||||
|
||||
- Intl extension:
|
||||
. Fixed crashes on invalid parameters in intl extension. (CVE-2010-4409).
|
||||
(Stas, Maksymilian Arciemowicz)
|
||||
. Fixed crashes on invalid parameters in intl extension. (CVE-2010-4409). (Stas, Maksymilian
|
||||
Arciemowicz)
|
||||
. Added support for formatting the timestamp stored in a DateTime object.
|
||||
(Stas)
|
||||
. Fixed bug #50590 (IntlDateFormatter::parse result is limited to the integer
|
||||
@@ -1029,8 +203,8 @@
|
||||
. Fixed bug #53273 (mb_strcut() returns garbage with the excessive length
|
||||
parameter). (CVE-2010-4156) (Mateusz Kocielski, Pierre, Moriyoshi)
|
||||
. Fixed bug #52981 (Unicode casing table was out-of-date. Updated with
|
||||
UnicodeData-6.0.0d7.txt and included the source of the generator program
|
||||
with the distribution) (Gustavo).
|
||||
UnicodeData-6.0.0d7.txt and included the source of the generator program with
|
||||
the distribution) (Gustavo).
|
||||
. Fixed bug #52681 (mb_send_mail() appends an extra MIME-Version header).
|
||||
(Adam)
|
||||
|
||||
@@ -1101,8 +275,8 @@
|
||||
. Fixed bug #52725 (gcc builtin atomic functions were sometimes used when they
|
||||
were not available). (fat)
|
||||
. Fixed bug #52693 (configuration file errors are not logged to stderr). (fat)
|
||||
. Fixed bug #52674 (FPM Status page returns inconsistent Content-Type
|
||||
headers). (fat)
|
||||
. Fixed bug #52674 (FPM Status page returns inconsistent Content-Type headers).
|
||||
(fat)
|
||||
. Fixed bug #52498 (libevent was not only linked to php-fpm). (fat)
|
||||
|
||||
- PDO:
|
||||
@@ -1160,9 +334,9 @@
|
||||
- Streams:
|
||||
. Fixed forward stream seeking emulation in streams that don't support seeking
|
||||
in situations where the read operation gives back less data than requested
|
||||
and when there was data in the buffer before the emulation started. Also
|
||||
made more consistent its behavior -- should return failure every time less
|
||||
data than was requested was skipped. (Gustavo)
|
||||
and when there was data in the buffer before the emulation started. Also made
|
||||
more consistent its behavior -- should return failure every time less data
|
||||
than was requested was skipped. (Gustavo)
|
||||
. Fixed bug #53241 (stream casting that relies on fdopen/fopencookie fails
|
||||
with streams opened with, inter alia, the 'xb' mode). (Gustavo)
|
||||
. Fixed bug #53006 (stream_get_contents has an unpredictable behavior when the
|
||||
|
||||
@@ -1,142 +0,0 @@
|
||||
$Id: README.NEW-OUTPUT-API 219039 2006-08-30 07:39:09Z mike $
|
||||
|
||||
|
||||
API adjustment to the old output control code:
|
||||
|
||||
Everything now resides beneath the php_output namespace,
|
||||
and there's an API call for every output handler op.
|
||||
|
||||
Checking output control layers status:
|
||||
// Using OG()
|
||||
php_output_get_status(TSRMLS_C);
|
||||
|
||||
Starting the default output handler:
|
||||
// php_start_ob_buffer(NULL, 0, 1 TSRMLS_CC);
|
||||
php_output_start_default(TSRMLS_C);
|
||||
|
||||
Starting an user handler by zval:
|
||||
// php_start_ob_buffer(zhandler, chunk_size, erase TSRMLS_CC);
|
||||
php_output_start_user(zhandler, chunk_size, flags TSRMLS_CC);
|
||||
|
||||
Starting an internal handler whithout context:
|
||||
// php_ob_set_internal_handler(my_php_output_handler_func_t, buffer_size, "output handler name", erase TSRMLS_CC);
|
||||
php_output_start_internal(handler_name, handler_name_len, my_php_output_handler_func_t, chunk_size, flags TSRMLS_CC);
|
||||
|
||||
Starting an internal handler with context:
|
||||
// not possible with old API
|
||||
php_output_handler *h;
|
||||
h = php_output_handler_create_internal(handler_name, handler_name_len, my_php_output_handler_context_func_t, chunk_size, flags TSRMLS_CC);
|
||||
php_output_handler_set_context(h, my_context, my_context_dtor);
|
||||
php_output_handler_start(h TSRMLS_CC);
|
||||
|
||||
Testing whether a certain output handler has already been started:
|
||||
// php_ob_handler_used("output handler name" TSRMLS_CC);
|
||||
php_output_handler_started(handler_name, handler_name_len TSRMLS_CC);
|
||||
|
||||
Flushing one output buffer:
|
||||
// php_ob_end_buffer(1, 1 TSRMLS_CC);
|
||||
php_output_flush(TSRMLS_C);
|
||||
|
||||
Flushing all output buffers:
|
||||
// not possible with old API
|
||||
php_output_flush_all(TSRMLS_C);
|
||||
|
||||
Cleaning one output buffer:
|
||||
// php_ob_end_buffer(0, 1 TSRMLS_CC);
|
||||
php_output_clean(TSRMLS_C);
|
||||
|
||||
Cleaning all output buffers:
|
||||
// not possible with old API
|
||||
php_output_clean_all(TSRMLS_C);
|
||||
|
||||
Discarding one output buffer:
|
||||
// php_ob_end_buffer(0, 0 TSRMLS_CC);
|
||||
php_output_discard(TSRMLS_C);
|
||||
|
||||
Discarding all output buffers:
|
||||
// php_ob_end_buffers(0 TSRMLS_CC);
|
||||
php_output_discard_all(TSRMLS_C);
|
||||
|
||||
Stopping (and dropping) one output buffer:
|
||||
// php_ob_end_buffer(1, 0 TSRMLS_CC)
|
||||
php_output_end(TSRMLS_C);
|
||||
|
||||
Stopping (and dropping) all output buffers:
|
||||
// php_ob_end_buffers(1, 0 TSRMLS_CC);
|
||||
php_output_end_all(TSRMLS_C);
|
||||
|
||||
Retrieving output buffers contents:
|
||||
// php_ob_get_buffer(zstring TSRMLS_CC);
|
||||
php_output_get_contents(zstring TSRMLS_CC);
|
||||
|
||||
Retrieving output buffers length:
|
||||
// php_ob_get_length(zlength TSRMLS_CC);
|
||||
php_output_get_length(zlength TSRMLS_CC);
|
||||
|
||||
Retrieving output buffering level:
|
||||
// OG(nesting_level);
|
||||
php_output_get_level(TSRMLS_C);
|
||||
|
||||
Issue a warning because of an output handler conflict:
|
||||
// php_ob_init_conflict("to be started handler name", "to be tested if already started handler name" TSRMLS_CC);
|
||||
php_output_handler_conflict(new_handler_name, new_handler_name_len, set_handler_name, set_handler_name_len TSRMLS_CC);
|
||||
|
||||
Registering a conflict checking function, which will be checked prior starting the handler:
|
||||
// not possible with old API, unless hardcoding into output.c
|
||||
php_output_handler_conflict_register(handler_name, handler_name_len, my_php_output_handler_conflict_check_t TSRMLS_CC);
|
||||
|
||||
Registering a reverse conflict checking function, which will be checked prior starting the specified foreign handler:
|
||||
// not possible with old API
|
||||
php_output_handler_reverse_conflict_register(foreign_handler_name, foreign_handler_name_len, my_php_output_handler_conflict_check_t TSRMLS_CC);
|
||||
|
||||
Facilitating a context from within an output handler callable with ob_start():
|
||||
// not possible with old API
|
||||
php_output_handler_hook(PHP_OUTPUT_HANDLER_HOOK_GET_OPAQ, (void *) &custom_ctx_ptr_ptr TSRMLS_CC);
|
||||
|
||||
Disabling of the output handler by itself:
|
||||
//not possible with old API
|
||||
php_output_handler_hook(PHP_OUTPUT_HANDLER_HOOK_DISABLE, NULL TSRMLS_CC);
|
||||
|
||||
Marking an output handler immutable by itself because of irreversibility of its operation:
|
||||
// not possible with old API
|
||||
php_output_handler_hook(PHP_OUTPUT_HANDLER_HOOK_IMMUTABLE, NULL TSRMLS_CC);
|
||||
|
||||
Restarting the output handler because of a CLEAN operation:
|
||||
// not possible with old API
|
||||
if (flags & PHP_OUTPUT_HANDLER_CLEAN) { ... }
|
||||
|
||||
Recognizing by the output handler itself if it gets discarded:
|
||||
// not possible with old API
|
||||
if ((flags & PHP_OUTPUT_HANDLER_CLEAN) && (flags & PHP_OUTPUT_HANDLER_FINAL)) { ... }
|
||||
|
||||
|
||||
Output handler hooks
|
||||
|
||||
The output handler can change its abilities at runtime. Eg. the gz handler can
|
||||
remove the CLEANABLE and REMOVABLE bits when the first output has passed through it;
|
||||
or handlers implemented in C to be used with ob_start() can contain a non-global
|
||||
context:
|
||||
PHP_OUTPUT_HANDLER_HOOK_GET_OPAQ
|
||||
pass a void*** pointer as second arg to receive the address of a pointer
|
||||
pointer to the opaque field of the output handler context
|
||||
PHP_OUTPUT_HANDLER_HOOK_GET_FLAGS
|
||||
pass a int* pointer as second arg to receive the flags set for the output handler
|
||||
PHP_OUTPUT_HANDLER_HOOK_GET_LEVEL
|
||||
pass a int* pointer as second arg to receive the level of this output handler
|
||||
(starts with 0)
|
||||
PHP_OUTPUT_HANDLER_HOOK_IMMUTABLE
|
||||
the second arg is ignored; marks the output handler to be neither cleanable
|
||||
nor removable
|
||||
PHP_OUTPUT_HANDLER_HOOK_DISABLE
|
||||
the second arg is ignored; marks the output handler as disabled
|
||||
|
||||
|
||||
Open questions
|
||||
|
||||
Should the userland API be adjusted and unified?
|
||||
|
||||
Many bits of the manual (and very first implementation) do not comply
|
||||
with the behaviour of the current (to be obsoleted) code, thus should
|
||||
the manual or the behaviour be adjusted?
|
||||
|
||||
END
|
||||
@@ -51,7 +51,6 @@ Type specifiers
|
||||
L - long, limits out-of-range numbers to LONG_MAX/LONG_MIN (long)
|
||||
o - object of any type (zval*)
|
||||
O - object of specific type given by class entry (zval*, zend_class_entry)
|
||||
p - valid path (string without null bytes in the middle) and its length (char*, int)
|
||||
r - resource (zval*)
|
||||
s - string (with possible null bytes) and its length (char*, int)
|
||||
z - the actual zval (zval*)
|
||||
|
||||
+7
-20
@@ -51,40 +51,27 @@ SUCH DAMAGE.
|
||||
|
||||
6. ext/standard crypt's blowfish implementation
|
||||
|
||||
The crypt_blowfish homepage is:
|
||||
|
||||
http://www.openwall.com/crypt/
|
||||
|
||||
This code comes from John the Ripper password cracker, with reentrant
|
||||
and crypt(3) interfaces added, but optimizations specific to password
|
||||
cracking removed.
|
||||
|
||||
Written by Solar Designer <solar at openwall.com> in 1998-2011.
|
||||
No copyright is claimed, and the software is hereby placed in the public
|
||||
domain. In case this attempt to disclaim copyright and place the software
|
||||
in the public domain is deemed null and void, then the software is
|
||||
Copyright (c) 1998-2011 Solar Designer and it is hereby released to the
|
||||
general public under the following terms:
|
||||
Written by Solar Designer <solar at openwall.com> in 1998-2002 and
|
||||
placed in the public domain.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted.
|
||||
|
||||
There's ABSOLUTELY NO WARRANTY, express or implied.
|
||||
There's absolutely no warranty.
|
||||
|
||||
It is my intent that you should be able to use this on your system,
|
||||
as part of a software package, or anywhere else to improve security,
|
||||
as a part of a software package, or anywhere else to improve security,
|
||||
ensure compatibility, or for any other purpose. I would appreciate
|
||||
it if you give credit where it is due and keep your modifications in
|
||||
the public domain as well, but I don't require that in order to let
|
||||
you place this code and any modifications you make under a license
|
||||
of your choice.
|
||||
|
||||
This implementation is mostly compatible with OpenBSD's bcrypt.c (prefix
|
||||
"$2a$") by Niels Provos <provos at citi.umich.edu>, and uses some of his
|
||||
This implementation is compatible with OpenBSD bcrypt.c (version 2a)
|
||||
by Niels Provos <provos at citi.umich.edu>, and uses some of his
|
||||
ideas. The password hashing algorithm was designed by David Mazieres
|
||||
<dm at lcs.mit.edu>. For more information on the level of compatibility,
|
||||
please refer to the comments in BF_set_key() and to the crypt(3) man page
|
||||
included in the crypt_blowfish tarball.
|
||||
<dm at lcs.mit.edu>.
|
||||
|
||||
There's a paper on the algorithm that explains its design decisions:
|
||||
|
||||
|
||||
+32
-32
@@ -20,18 +20,12 @@ php/QA/bug websites try to have someone from the webmaster team (Bjori) on hand.
|
||||
|
||||
5. Verify the tags to be extra sure everything was tagged properly.
|
||||
|
||||
6. Moving extensions from/to PECL requires write acces to the destination.
|
||||
Most developers should have this.
|
||||
6. Moving extensions from/to PECL requires root level access to the CVS server.
|
||||
Contact systems@php.net to get this taken care of.
|
||||
|
||||
Moving extensions from php-src to PECL
|
||||
- Checkout the pecl directory, most likely you want a sparse-root checkout
|
||||
svn co --depth=empty https://svn.php.net/repository/pecl
|
||||
- Create an directory for the extension incl. branch and tag structure,
|
||||
no trunk at this point and commit this to svn
|
||||
cd pecl; mkdir foo foo/tags foo/branches; svn add foo; svn commit
|
||||
- Move the extension from php-src to the new location
|
||||
svn mv https://svn.php.net/repository/php/php-src/trunk/ext/foo \
|
||||
https://svn.php.net/repository/pecl/foo/trunk
|
||||
- Filesystem: cp -r php-src/ext/foo pecl/foo
|
||||
- cvs rm php-src/ext/foo
|
||||
|
||||
If the extension is still usable or not dead, in cooperation with the extension
|
||||
maintainers if any:
|
||||
@@ -39,23 +33,25 @@ maintainers if any:
|
||||
- create the package.xml, commit
|
||||
- release the package
|
||||
|
||||
For Moving extensions from PECL to php-src the svn mv has to be tone the other
|
||||
way round.
|
||||
Moving extensions from PECL to php-src
|
||||
- Filesystem: cp -r pecl/foo php-src/ext/foo
|
||||
OR depending on the wishes from the PECL extension maintainer.
|
||||
- Filesystem: ln -s pecl/foo php-src/ext/foo
|
||||
|
||||
Rolling a non stable release (alpha/beta/RC)
|
||||
--------------------------------------------
|
||||
|
||||
1. Check windows snapshot builder logs (http://snaps.php.net/win32/snapshot-STABLE.log f.e.)
|
||||
|
||||
2. run the "scripts/dev/credits" script in php-src and commit the changes in the
|
||||
credits files in ext/standard.
|
||||
|
||||
3. Bump the version numbers in ``main/php_version.h``, ``configure.in`` and possibly ``NEWS``.
|
||||
2. Bump the version numbers in ``main/php_version.h``, ``configure.in`` and possibly ``NEWS``.
|
||||
Do not use abbreviations for alpha and beta.
|
||||
|
||||
4. Commit those changes and note the revision id.
|
||||
3. Commit those changes
|
||||
|
||||
5. tag the repository with the version. To do the tag in a fast way do a svn copy on the server using full URLs. You should use the revision id from the above commit to prevent mistakes in case there was a commit in between. f.e. "``svn cp https://svn.php.net/repository/php/php-src/branches/PHP_5_3@308399 https://svn.php.net/repository/php/php-src/tags/php_5_3_6RC1``"
|
||||
4. run the "scripts/dev/credits" script in php-src and commit the changes in the
|
||||
credits files in ext/standard.
|
||||
|
||||
5. tag the repository with the version f.e. "``cvs tag php_4_4_1RC1``"
|
||||
(of course, you need to change that to the version you're rolling an RC for).
|
||||
|
||||
6. Bump up the version numbers in ``main/php_version.h``, ``configure.in``
|
||||
@@ -69,7 +65,7 @@ correctly work.
|
||||
8. Log in onto the snaps box and go into the correct tree (f.e. the PHP_4_4
|
||||
branch if you're rolling 4.4.x releases).
|
||||
|
||||
9. You do not have to update the tree, but of course you can with "``svn up``".
|
||||
9. You do not have to update the tree, but of course you can with "``cvs up -dP``".
|
||||
|
||||
10. run: ``./makedist php 4.4.1RC1``, this will export the tree, create configure
|
||||
and build two tarballs (one gz and one bz2).
|
||||
@@ -104,19 +100,21 @@ Derick) run the following commands for you:
|
||||
|
||||
``sudo -u ezmlm ezmlm-sub ~ezmlm/primary-qa-tester/mod moderator-email-address``
|
||||
|
||||
3. Update ``web/qa/trunk/include/release-qa.php`` with the appropriate information.
|
||||
See the documentation within release-qa.php for more information, but all releases
|
||||
and RCs are configured here. Only $QA_RELEASES needs to be edited.
|
||||
3. Update the MD5 sums in ``web/qa/trunk/include/rc-md5sums.txt`` (no empty lines).
|
||||
|
||||
Example: When rolling an RC, set the 'rc' with appropriate information for the
|
||||
given version.
|
||||
4. Update in ``web/qa/trunk/include/release-qa.php`` constants with the new RC and
|
||||
commit this.
|
||||
|
||||
Note: Remember to update the MD5 checksum information.
|
||||
a. ``$BUILD_TEST_RELEASES`` = array("4.4.7RC1", "5.2.2RC1")
|
||||
|
||||
b. ``$CURRENT_QA_RELEASE_4`` = "4.4.7RC1" (``$CURRENT_QA_RELEASE_5`` for PHP5)
|
||||
|
||||
1. Update in ``web/php-bugs/trunk/include/php_versions.php`` to include the new RC and commit.
|
||||
c. ``$RELEASE_PROCESS`` = array(4 => true, 5 => true)
|
||||
|
||||
2. Update ``web/php/trunk/include/version.inc`` (x=major version number)
|
||||
1. Update in ``php-bugs/trunk/include/functions.inc`` the ``show_version_option``
|
||||
function to include the new RC and commit.
|
||||
|
||||
2. Update ``phpweb/include/version.inc`` (x=major version number)
|
||||
|
||||
a. ``$PHP_x_RC`` = "5.3.0RC1"
|
||||
|
||||
@@ -124,7 +122,7 @@ Derick) run the following commands for you:
|
||||
|
||||
3. Commit those changes:
|
||||
|
||||
a. ``svn commit web/qa/trunk web/php-bugs/trunk web/php/trunk``
|
||||
a. ``cvs commit include/version.inc include/releases.inc``
|
||||
|
||||
4. For the first RC, write the doc team (phpdoc@lists.php.net) about updating the
|
||||
INSTALL and win32/install.txt files which are generated from the PHP manual sources.
|
||||
@@ -246,11 +244,13 @@ number, and remove the RC from there.
|
||||
|
||||
11. Update ``qaweb/include/release-qa.php``
|
||||
|
||||
- Update $QA_RELEASES with the appropriate information, which means bumping
|
||||
the version number to an upcoming version.
|
||||
a. Update the $BUILD_TEST_RELEASES array with the release name
|
||||
|
||||
Example: If PHP 5.3.7 is being released, then PHP 5.3.8 is the next QA version,
|
||||
so replace 5.3.7 with 5.3.8 within $QA_RELEASES.
|
||||
b. Update $RELEASE_PROCESS array (set to false)
|
||||
|
||||
I. For PHP4: Set $CURRENT_QA_RELEASE_4 to false
|
||||
|
||||
II. For PHP5: Set $CURRENT_QA_RELEASE_5 to false
|
||||
|
||||
Re-releasing the same version (or -pl)
|
||||
--------------------------------------
|
||||
|
||||
+4
-8
@@ -43,17 +43,13 @@ Having said that, here are the organizational rules::
|
||||
|
||||
Currently we have the following branches in use::
|
||||
|
||||
trunk The active development branch.
|
||||
trunk Will become PHP 6.0. This CVS branch is for active development.
|
||||
|
||||
branches/PHP_5_4 Is used to release the PHP 5.4.x series. It still allows for
|
||||
branches/PHP_5_3 Is used to release the PHP 5.3.x series. It still allows for
|
||||
larger enhancements.
|
||||
|
||||
branches/PHP_5_3 Is used to release the PHP 5.3.x series. This is current
|
||||
stable version and is open for bugfixes and small
|
||||
improvements (check with RMs if in doubt).
|
||||
|
||||
branches/PHP_5_2 Is used to release the PHP 5.2.x series. It is closed for
|
||||
changes now.
|
||||
branches/PHP_5_2 Is used to release the PHP 5.2.x series. Only bugfixes are permitted
|
||||
on this branch (Consult the releasemaster prior to commit).
|
||||
|
||||
branches/PHP_5_1 This branch is closed.
|
||||
|
||||
|
||||
+17
-5
@@ -19,7 +19,9 @@ A simple implementation might look like the following. This stores the
|
||||
original raw user data and adds a my_get_raw() function while the normal
|
||||
$_POST, $_GET and $_COOKIE arrays are only populated with stripped
|
||||
data. In this simple example all I am doing is calling strip_tags() on
|
||||
the data.
|
||||
the data. If register_globals is turned on, the default globals that
|
||||
are created will be stripped ($foo) while a $RAW_foo is created with the
|
||||
original user input.
|
||||
|
||||
ZEND_BEGIN_MODULE_GLOBALS(my_input_filter)
|
||||
zval *post_array;
|
||||
@@ -153,6 +155,8 @@ PHP_FUNCTION(my_get_raw)
|
||||
int var_len;
|
||||
zval **tmp;
|
||||
zval *array_ptr = NULL;
|
||||
HashTable *hash_ptr;
|
||||
char *raw_var;
|
||||
|
||||
if(zend_parse_parameters(2 TSRMLS_CC, "ls", &arg, &var, &var_len) == FAILURE) {
|
||||
return;
|
||||
@@ -170,15 +174,23 @@ PHP_FUNCTION(my_get_raw)
|
||||
break;
|
||||
}
|
||||
|
||||
if(!array_ptr) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
if(!array_ptr) RETURN_FALSE;
|
||||
|
||||
if(zend_hash_find(HASH_OF(array_ptr), var, var_len+5, (void **)&tmp) == SUCCESS) {
|
||||
/*
|
||||
* I'm changing the variable name here because when running with register_globals on,
|
||||
* the variable will end up in the global symbol table
|
||||
*/
|
||||
raw_var = emalloc(var_len+5); /* RAW_ and a \0 */
|
||||
strcpy(raw_var, "RAW_");
|
||||
strlcat(raw_var,var,var_len+5);
|
||||
hash_ptr = HASH_OF(array_ptr);
|
||||
|
||||
if(zend_hash_find(hash_ptr, raw_var, var_len+5, (void **)&tmp) == SUCCESS) {
|
||||
*return_value = **tmp;
|
||||
zval_copy_ctor(return_value);
|
||||
} else {
|
||||
RETVAL_FALSE;
|
||||
}
|
||||
efree(raw_var);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
Things to do or at least think about doing in the future. Name in
|
||||
parenthesis means that person has taken on this project.
|
||||
|
||||
Zend
|
||||
----
|
||||
* Allow foreach ($array as $k => list($a, $b)) syntax for multi
|
||||
dimensional arrays.
|
||||
* Look at replacing c-lib call tolower().
|
||||
* Make hash API functions work with HASH_OF() to save time.
|
||||
* Native large number support (probably with GNU GMP)
|
||||
* Const'ify APIs. Right now, many functions leave parameters untouched,
|
||||
but don't declare those as const. This makes interaction with other
|
||||
interfaces difficult which pass const parameters to us.
|
||||
|
||||
|
||||
global
|
||||
------
|
||||
* Make sure that all ZTS globals get destructed. Most ts_allocate_id()
|
||||
calls should have a dtor entry.
|
||||
* on some platforms unimplemented function will just do nothing
|
||||
(e.g. symlink) they should print a warning or not even be defined!
|
||||
(DONE ?)
|
||||
* --enable-all in configure. (--enable-shared=max ...)
|
||||
* make configure print out a summary when it's done (like XEmacs)
|
||||
* replace standard functions which work on static data with
|
||||
reentrancy-safe functions (DONE?).
|
||||
* make SAPI conform to CGI/1.1. Currently, all SAPI modules
|
||||
define REMOTE_ADDR etc. themselves and reach only various level
|
||||
of compliance.
|
||||
* see what functions might need to be changed to use HashPosition, so
|
||||
that the internal array pointer is not affected.
|
||||
* Move most extensions and PEAR packages out of the PHP CVS tree,
|
||||
include them again during release packaging.
|
||||
|
||||
Other
|
||||
* use thread-safe resolver functions (either require BIND 8 or adns).
|
||||
* implement javadoc based function docs template system.
|
||||
* provide optional IPv6 support (seems to be done?).
|
||||
* find a better way to implement script timeouts. SIGVTALRM is used
|
||||
by some POSIX threads implementations (i.e. OpenBSD) and is not
|
||||
available in ZTS mode.
|
||||
* Implement flush feature suitable for nested output buffers.
|
||||
|
||||
Streams
|
||||
-------
|
||||
* Route filestat.c through the wrapper layer; isolate the statcache code
|
||||
so that it is independent of php functions and can be applied to any
|
||||
stream/path.
|
||||
* Implement generalized connection pool for stated protocols such as
|
||||
ftp and http/1.1 (using keep-alive) to avoid having to negotiate
|
||||
new command/request stream for each subsequent call; Possibly store
|
||||
resources in contexts (creating a default context if necessary) to
|
||||
allow segmentation of connection pools.
|
||||
* Add a method to take ownership of the memory buffer in memory streams so
|
||||
that generating string values for zvals doesn't require an estrdup.
|
||||
* bundle and use curl lib for fopen wrapper.
|
||||
|
||||
documentation
|
||||
-------------
|
||||
* Add remarks in the documentation which functions are not implemented
|
||||
on win32.
|
||||
* Add remarks in the documentation which functions are not binary-safe.
|
||||
* Update curl documentation (DONE?)
|
||||
* Add developer documentation.
|
||||
* Add detailed documentation for Java extension.
|
||||
|
||||
ext/curl
|
||||
--------
|
||||
* Have a warning scheme for when people use unsupported features.
|
||||
|
||||
ext/oci8
|
||||
--------
|
||||
* All OCIFetch*() functions should return 0 for no more data and false on
|
||||
error.
|
||||
* Have a flag that trims trailing spaces from CHAR fields on retrieval.
|
||||
* Make allow_call_time_pass_reference=Off working.
|
||||
* For additional todo information, see oci8.c, in ext/oci8
|
||||
|
||||
ext/odbc
|
||||
--------
|
||||
For PHP 4.3.0:
|
||||
* update all php_error calls to php_error_docref where valid
|
||||
* integrate EXPERIMENTAL ODBC update for use in PHP 5.0, use for
|
||||
testing purposes only.
|
||||
|
||||
For PHP 5.0.0
|
||||
* Activate EXPERIMENTAL ODBC codebase update
|
||||
|
||||
ext/pcre
|
||||
--------
|
||||
* Allow user to set PCRE_NOTEMPTY, PCRE_ANCHORED at execution time, maybe
|
||||
|
||||
ext/pcntl
|
||||
---------
|
||||
* Change internal callback handler to use TICKS
|
||||
* Remove all zend_extension code
|
||||
* Add object callback support to pcntl_signal()
|
||||
|
||||
ext/session
|
||||
-----------
|
||||
For PHP 4.3.0:
|
||||
* session_abort() to abort session. ie: Do not save session data.
|
||||
* Allow unset($_SESSION) or unset($HTTP_SESSION_VARS) to unset
|
||||
session vars regardless of register_globals setting.
|
||||
|
||||
Other:
|
||||
* Maybe implement finer-grained session variables that could be
|
||||
locked individually.
|
||||
* Write a network-transparent storage back-end with fallover
|
||||
facilities
|
||||
* Provide a callback facility which is executed upon encountering
|
||||
an unknown class name during deserialization
|
||||
|
||||
ext/standard
|
||||
------------
|
||||
* Add a version number to data serialized via serialize().
|
||||
* Possibly modify parsing of GPC data to automatically create arrays if
|
||||
variable name is seen more than once.
|
||||
* Implement regex-cache for url-functions.
|
||||
* Move socket related functions to fsock.c.
|
||||
|
||||
ext/wddx
|
||||
--------
|
||||
* See if we can support the remaining data types:
|
||||
binary
|
||||
|
||||
http://www.wddx.org/WDDX_SDK_10a/7__References/WDDX_DTD.htm
|
||||
(Andrei)
|
||||
|
||||
* implement wddx_packet_as_javascript(). (Andrei)
|
||||
|
||||
other cool stuff
|
||||
----------------
|
||||
* PVM extension
|
||||
|
||||
vim:et:sw=4:ts=4
|
||||
@@ -0,0 +1,4 @@
|
||||
Zend Engine
|
||||
-----------
|
||||
- Look at making zend_constant value member be a zval* instead of zval. (Andi)
|
||||
- Implement inheritance rules for type hints. (Marcus)
|
||||
@@ -0,0 +1,89 @@
|
||||
Component: Zend Engine 2
|
||||
|
||||
Important stuff to finish: PPP members/PPP methods,
|
||||
support of overloaded extensions, possibly differentiate
|
||||
between class and namespace as discussed with Stig in
|
||||
Germany.
|
||||
Responsibility: Zeev, Andi, Stas
|
||||
Time frame: Couple of months for first part and extensions will be
|
||||
ongoing while PHP is being fixed.
|
||||
Things to leave for later versions: Native aggregation
|
||||
support, accessing static members via object and not class.
|
||||
|
||||
|
||||
Component: Aggregation
|
||||
Responsibility: Andi, Stig?
|
||||
Time frame: ?
|
||||
|
||||
|
||||
Component: Redesign of API Versioning
|
||||
Responsibility: ?
|
||||
Time frame: 1 month
|
||||
|
||||
|
||||
Component: Thread Safety
|
||||
Identify the extensions that are not thread safe by design
|
||||
or due to dependant libraries and identify them as such.
|
||||
If possible try to resolve thread safety issue via code
|
||||
improvements (if php code or patches will be accepted by
|
||||
library maintainers). For situations where thread safety
|
||||
cannot easily be acheived a flag in the extension API is
|
||||
set so PHP can identify non-thread safe extensions. These
|
||||
extensions will not be loaded in a ZTS compiled binary
|
||||
(unless it is cli/cgi).
|
||||
|
||||
Responsibility: ?
|
||||
Time frame: ?
|
||||
|
||||
|
||||
Component: SAPI
|
||||
Environment variables defined in the CGI spec need to be
|
||||
verified in each SAPI module that they conform to the CGI
|
||||
spec correctly. If they do not, the SAPI module needs to
|
||||
fix the variable prior to script execution. Having this
|
||||
conformity will aid in having PHP scripts run correctly
|
||||
under different sapi modules.
|
||||
|
||||
Responsibility: Shane Caraveo & each sapi module owner
|
||||
Timeframe: ? (but shouldn't be much effort, most modules are probably ok)
|
||||
|
||||
|
||||
Component: RPC Abstraction Layer
|
||||
Porting java, com, dotnet, xmlrpc, corba, soap and python, srm
|
||||
(are there more ?) to work with the new oo api and preferably
|
||||
by using ext/rpc.
|
||||
Responsibility: Harald
|
||||
Time frame: 2 months (but i have to wait for a few engine features first)
|
||||
|
||||
|
||||
Component: OO Extensions
|
||||
Each OO extension has to be revised and rewritten to fit into
|
||||
the new OO model. We should decide which extensions are a must
|
||||
to have for the release and which can be ported by the maintainer
|
||||
later as a separate pecl release.
|
||||
A list of extensions to be extended that have to be investigated:
|
||||
* browscap
|
||||
* aggregate
|
||||
* all *sql extensions (*_fetch_object)
|
||||
* domxml (seems like christian is rewriting it anyways)
|
||||
* ming
|
||||
Responsibility: Harald (, extension maintainers)
|
||||
|
||||
|
||||
Component: Abstract Data Types (ADT)
|
||||
Responsibility: Sterling, Harald
|
||||
Time frame: ?
|
||||
|
||||
|
||||
Component: Test Suite
|
||||
Extending the test suite with atleast a test for every
|
||||
function in an extension that doesn't require external
|
||||
resources. Also developing an automated test thing which
|
||||
cvs ups's, compiles and tests the build on a daily base on
|
||||
as much platforms/extensions as possible.
|
||||
|
||||
The test suite will also be extended to support threaded
|
||||
testing and testing for differing sapi modules (via http
|
||||
calls or other methods).
|
||||
Reponsibility: Derick (, extension maintainers)
|
||||
Time frame: 3 months
|
||||
+1
-17
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Thread Safe Resource Manager |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1999-2011, Andi Gutmans, Sascha Schumann, Zeev Suraski |
|
||||
| Copyright (c) 1999-2010, Andi Gutmans, Sascha Schumann, Zeev Suraski |
|
||||
| This source file is subject to the TSRM license, that is bundled |
|
||||
| with this package in the file LICENSE |
|
||||
+----------------------------------------------------------------------+
|
||||
@@ -710,22 +710,6 @@ TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp)
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
Changes the signal mask of the calling thread
|
||||
*/
|
||||
#ifdef HAVE_SIGPROCMASK
|
||||
TSRM_API int tsrm_sigmask(int how, const sigset_t *set, sigset_t *oldset)
|
||||
{
|
||||
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Changed sigmask in thread: %ld", tsrm_thread_id()));
|
||||
/* TODO: add support for other APIs */
|
||||
#ifdef PTHREADS
|
||||
return pthread_sigmask(how, set, oldset);
|
||||
#else
|
||||
return sigprocmask(how, set, oldset);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler)
|
||||
{
|
||||
|
||||
+1
-8
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Thread Safe Resource Manager |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1999-2011, Andi Gutmans, Sascha Schumann, Zeev Suraski |
|
||||
| Copyright (c) 1999-2010, Andi Gutmans, Sascha Schumann, Zeev Suraski |
|
||||
| This source file is subject to the TSRM license, that is bundled |
|
||||
| with this package in the file LICENSE |
|
||||
+----------------------------------------------------------------------+
|
||||
@@ -90,10 +90,6 @@ typedef struct {
|
||||
# define MUTEX_T beos_ben *
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SIGNAL_H
|
||||
#include <signal.h>
|
||||
#endif
|
||||
|
||||
typedef void (*ts_allocate_ctor)(void *, void ***);
|
||||
typedef void (*ts_allocate_dtor)(void *, void ***);
|
||||
|
||||
@@ -142,9 +138,6 @@ TSRM_API MUTEX_T tsrm_mutex_alloc(void);
|
||||
TSRM_API void tsrm_mutex_free(MUTEX_T mutexp);
|
||||
TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp);
|
||||
TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp);
|
||||
#ifdef HAVE_SIGPROCMASK
|
||||
TSRM_API int tsrm_sigmask(int how, const sigset_t *set, sigset_t *oldset);
|
||||
#endif
|
||||
|
||||
TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler);
|
||||
TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread_end_handler);
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
#undef PTHREADS
|
||||
+1
-1
@@ -33,7 +33,7 @@ $(makefile_in_files): $(makefile_am_files)
|
||||
aclocal.m4: configure.in acinclude.m4
|
||||
aclocal
|
||||
|
||||
$(config_h_in): configure.in
|
||||
$(config_h_in): configure.in acconfig.h
|
||||
# explicitly remove target since autoheader does not seem to work
|
||||
# correctly otherwise (timestamps are not updated)
|
||||
@rm -f $@
|
||||
|
||||
@@ -7,10 +7,6 @@ AC_INIT(TSRM.c)
|
||||
AM_INIT_AUTOMAKE(TSRM, 1.0, nodefine)
|
||||
AM_CONFIG_HEADER(tsrm_config.h)
|
||||
|
||||
AH_TOP([
|
||||
#undef PTHREADS
|
||||
])
|
||||
|
||||
sinclude(tsrm.m4)
|
||||
|
||||
TSRM_BASIC_CHECKS
|
||||
|
||||
@@ -30,8 +30,6 @@ AC_REQUIRE([AC_PROG_RANLIB])dnl
|
||||
|
||||
AC_CHECK_HEADERS(stdarg.h)
|
||||
|
||||
AC_CHECK_FUNCS(sigprocmask)
|
||||
|
||||
])
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2011 The PHP Group |
|
||||
| Copyright (c) 1997-2010 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2011 The PHP Group |
|
||||
| Copyright (c) 1997-2010 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+41
-69
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2011 The PHP Group |
|
||||
| Copyright (c) 1997-2010 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -277,6 +277,18 @@ CWD_API int php_sys_readlink(const char *link, char *target, size_t target_len){
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
CWD_API int php_sys_stat(const char *path, struct stat *buf) /* {{{ */
|
||||
{
|
||||
return php_sys_stat_ex(path, buf, 0);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
CWD_API int php_sys_lstat(const char *path, struct stat *buf) /* {{{ */
|
||||
{
|
||||
return php_sys_stat_ex(path, buf, 1);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
CWD_API int php_sys_stat_ex(const char *path, struct stat *buf, int lstat) /* {{{ */
|
||||
{
|
||||
WIN32_FILE_ATTRIBUTE_DATA data;
|
||||
@@ -497,9 +509,6 @@ CWD_API char *virtual_getcwd_ex(size_t *length TSRMLS_DC) /* {{{ */
|
||||
|
||||
*length = 1;
|
||||
retval = (char *) malloc(2);
|
||||
if (retval == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
retval[0] = DEFAULT_SLASH;
|
||||
retval[1] = '\0';
|
||||
return retval;
|
||||
@@ -512,9 +521,6 @@ CWD_API char *virtual_getcwd_ex(size_t *length TSRMLS_DC) /* {{{ */
|
||||
|
||||
*length = state->cwd_length+1;
|
||||
retval = (char *) malloc(*length+1);
|
||||
if (retval == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
memcpy(retval, state->cwd, *length);
|
||||
retval[0] = toupper(retval[0]);
|
||||
retval[*length-1] = DEFAULT_SLASH;
|
||||
@@ -617,14 +623,7 @@ CWD_API void realpath_cache_del(const char *path, int path_len TSRMLS_DC) /* {{{
|
||||
memcmp(path, (*bucket)->path, path_len) == 0) {
|
||||
realpath_cache_bucket *r = *bucket;
|
||||
*bucket = (*bucket)->next;
|
||||
|
||||
/* if the pointers match then only subtract the length of the path */
|
||||
if(r->path == r->realpath) {
|
||||
CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1;
|
||||
} else {
|
||||
CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1 + r->realpath_len + 1;
|
||||
}
|
||||
|
||||
CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1 + r->realpath_len + 1;
|
||||
free(r);
|
||||
return;
|
||||
} else {
|
||||
@@ -649,10 +648,6 @@ static inline void realpath_cache_add(const char *path, int path_len, const char
|
||||
realpath_cache_bucket *bucket = malloc(size);
|
||||
unsigned long n;
|
||||
|
||||
if (bucket == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef PHP_WIN32
|
||||
bucket->key = realpath_cache_key(path, path_len TSRMLS_CC);
|
||||
#else
|
||||
@@ -699,13 +694,7 @@ static inline realpath_cache_bucket* realpath_cache_find(const char *path, int p
|
||||
if (CWDG(realpath_cache_ttl) && (*bucket)->expires < t) {
|
||||
realpath_cache_bucket *r = *bucket;
|
||||
*bucket = (*bucket)->next;
|
||||
|
||||
/* if the pointers match then only subtract the length of the path */
|
||||
if(r->path == r->realpath) {
|
||||
CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1;
|
||||
} else {
|
||||
CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1 + r->realpath_len + 1;
|
||||
}
|
||||
CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1 + r->realpath_len + 1;
|
||||
free(r);
|
||||
} else if (key == (*bucket)->key && path_len == (*bucket)->path_len &&
|
||||
memcmp(path, (*bucket)->path, path_len) == 0) {
|
||||
@@ -877,9 +866,6 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i
|
||||
}
|
||||
|
||||
pbuffer = (REPARSE_DATA_BUFFER *)tsrm_do_alloca(MAXIMUM_REPARSE_DATA_BUFFER_SIZE, use_heap_large);
|
||||
if (pbuffer == NULL) {
|
||||
return -1;
|
||||
}
|
||||
if(!DeviceIoControl(hLink, FSCTL_GET_REPARSE_POINT, NULL, 0, pbuffer, MAXIMUM_REPARSE_DATA_BUFFER_SIZE, &retlength, NULL)) {
|
||||
tsrm_free_alloca(pbuffer, use_heap_large);
|
||||
CloseHandle(hLink);
|
||||
@@ -966,9 +952,9 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i
|
||||
}
|
||||
|
||||
if (!isVolume) {
|
||||
char * tmp2 = substitutename + substitutename_off;
|
||||
char * tmp = substitutename + substitutename_off;
|
||||
for(bufindex = 0; bufindex < (substitutename_len - substitutename_off); bufindex++) {
|
||||
*(path + bufindex) = *(tmp2 + bufindex);
|
||||
*(path + bufindex) = *(tmp + bufindex);
|
||||
}
|
||||
|
||||
*(path + bufindex) = 0;
|
||||
@@ -1080,7 +1066,6 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i
|
||||
}
|
||||
if (is_dir && !directory) {
|
||||
/* not a directory */
|
||||
tsrm_free_alloca(tmp, use_heap);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@@ -1132,7 +1117,7 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i
|
||||
|
||||
/* Resolve path relatively to state and put the real path into state */
|
||||
/* returns 0 for ok, 1 for error */
|
||||
CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath TSRMLS_DC) /* {{{ */
|
||||
CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath) /* {{{ */
|
||||
{
|
||||
int path_length = strlen(path);
|
||||
char resolved_path[MAXPATHLEN];
|
||||
@@ -1142,6 +1127,7 @@ CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func
|
||||
int ret;
|
||||
int add_slash;
|
||||
void *tmp;
|
||||
TSRMLS_FETCH();
|
||||
|
||||
if (path_length == 0 || path_length >= MAXPATHLEN-1) {
|
||||
#ifdef TSRM_WIN32
|
||||
@@ -1337,7 +1323,7 @@ verify:
|
||||
|
||||
CWD_API int virtual_chdir(const char *path TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
return virtual_file_ex(&CWDG(cwd), path, php_is_dir_ok, CWD_REALPATH TSRMLS_CC)?-1:0;
|
||||
return virtual_file_ex(&CWDG(cwd), path, php_is_dir_ok, CWD_REALPATH)?-1:0;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -1384,10 +1370,6 @@ CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC) /* {
|
||||
/* realpath("") returns CWD */
|
||||
if (!*path) {
|
||||
new_state.cwd = (char*)malloc(1);
|
||||
if (new_state.cwd == NULL) {
|
||||
retval = NULL;
|
||||
goto end;
|
||||
}
|
||||
new_state.cwd[0] = '\0';
|
||||
new_state.cwd_length = 0;
|
||||
if (VCWD_GETCWD(cwd, MAXPATHLEN)) {
|
||||
@@ -1397,15 +1379,11 @@ CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC) /* {
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
} else {
|
||||
new_state.cwd = (char*)malloc(1);
|
||||
if (new_state.cwd == NULL) {
|
||||
retval = NULL;
|
||||
goto end;
|
||||
}
|
||||
new_state.cwd[0] = '\0';
|
||||
new_state.cwd_length = 0;
|
||||
}
|
||||
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH TSRMLS_CC)==0) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH)==0) {
|
||||
int len = new_state.cwd_length>MAXPATHLEN-1?MAXPATHLEN-1:new_state.cwd_length;
|
||||
|
||||
memcpy(real_path, new_state.cwd, len);
|
||||
@@ -1416,7 +1394,7 @@ CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC) /* {
|
||||
}
|
||||
|
||||
CWD_STATE_FREE(&new_state);
|
||||
end:
|
||||
|
||||
return retval;
|
||||
}
|
||||
/* }}} */
|
||||
@@ -1427,7 +1405,7 @@ CWD_API int virtual_filepath_ex(const char *path, char **filepath, verify_path_f
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
retval = virtual_file_ex(&new_state, path, verify_path, CWD_FILEPATH TSRMLS_CC);
|
||||
retval = virtual_file_ex(&new_state, path, verify_path, CWD_FILEPATH);
|
||||
|
||||
*filepath = new_state.cwd;
|
||||
|
||||
@@ -1452,7 +1430,7 @@ CWD_API FILE *virtual_fopen(const char *path, const char *mode TSRMLS_DC) /* {{{
|
||||
}
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_EXPAND TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_FILEPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return NULL;
|
||||
}
|
||||
@@ -1470,13 +1448,13 @@ CWD_API int virtual_access(const char *pathname, int mode TSRMLS_DC) /* {{{ */
|
||||
int ret;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_REALPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if defined(TSRM_WIN32)
|
||||
ret = tsrm_win32_access(new_state.cwd, mode TSRMLS_CC);
|
||||
ret = tsrm_win32_access(new_state.cwd, mode);
|
||||
#else
|
||||
ret = access(new_state.cwd, mode);
|
||||
#endif
|
||||
@@ -1543,7 +1521,7 @@ CWD_API int virtual_utime(const char *filename, struct utimbuf *buf TSRMLS_DC) /
|
||||
int ret;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1566,7 +1544,7 @@ CWD_API int virtual_chmod(const char *filename, mode_t mode TSRMLS_DC) /* {{{ */
|
||||
int ret;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1585,7 +1563,7 @@ CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group, int li
|
||||
int ret;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1612,7 +1590,7 @@ CWD_API int virtual_open(const char *path TSRMLS_DC, int flags, ...) /* {{{ */
|
||||
int f;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_FILEPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_FILEPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1640,7 +1618,7 @@ CWD_API int virtual_creat(const char *path, mode_t mode TSRMLS_DC) /* {{{ */
|
||||
int f;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_FILEPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_FILEPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1659,14 +1637,14 @@ CWD_API int virtual_rename(char *oldname, char *newname TSRMLS_DC) /* {{{ */
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&old_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&old_state, oldname, NULL, CWD_EXPAND TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&old_state, oldname, NULL, CWD_EXPAND)) {
|
||||
CWD_STATE_FREE(&old_state);
|
||||
return -1;
|
||||
}
|
||||
oldname = old_state.cwd;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, newname, NULL, CWD_EXPAND TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, newname, NULL, CWD_EXPAND)) {
|
||||
CWD_STATE_FREE(&old_state);
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
@@ -1695,7 +1673,7 @@ CWD_API int virtual_stat(const char *path, struct stat *buf TSRMLS_DC) /* {{{ */
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1713,7 +1691,7 @@ CWD_API int virtual_lstat(const char *path, struct stat *buf TSRMLS_DC) /* {{{ *
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_EXPAND TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_EXPAND)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1731,7 +1709,7 @@ CWD_API int virtual_unlink(const char *path TSRMLS_DC) /* {{{ */
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_EXPAND TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_EXPAND)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1749,7 +1727,7 @@ CWD_API int virtual_mkdir(const char *pathname, mode_t mode TSRMLS_DC) /* {{{ */
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_FILEPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_FILEPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1770,7 +1748,7 @@ CWD_API int virtual_rmdir(const char *pathname TSRMLS_DC) /* {{{ */
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_EXPAND TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_EXPAND)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1792,7 +1770,7 @@ CWD_API DIR *virtual_opendir(const char *pathname TSRMLS_DC) /* {{{ */
|
||||
DIR *retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_REALPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return NULL;
|
||||
}
|
||||
@@ -1807,7 +1785,7 @@ CWD_API DIR *virtual_opendir(const char *pathname TSRMLS_DC) /* {{{ */
|
||||
#ifdef TSRM_WIN32
|
||||
CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
return popen_ex(command, type, CWDG(cwd).cwd, NULL TSRMLS_CC);
|
||||
return popen_ex(command, type, CWDG(cwd).cwd, NULL);
|
||||
}
|
||||
/* }}} */
|
||||
#elif defined(NETWARE)
|
||||
@@ -1909,9 +1887,6 @@ CWD_API char *tsrm_realpath(const char *path, char *real_path TSRMLS_DC) /* {{{
|
||||
/* realpath("") returns CWD */
|
||||
if (!*path) {
|
||||
new_state.cwd = (char*)malloc(1);
|
||||
if (new_state.cwd == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
new_state.cwd[0] = '\0';
|
||||
new_state.cwd_length = 0;
|
||||
if (VCWD_GETCWD(cwd, MAXPATHLEN)) {
|
||||
@@ -1923,14 +1898,11 @@ CWD_API char *tsrm_realpath(const char *path, char *real_path TSRMLS_DC) /* {{{
|
||||
new_state.cwd_length = strlen(cwd);
|
||||
} else {
|
||||
new_state.cwd = (char*)malloc(1);
|
||||
if (new_state.cwd == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
new_state.cwd[0] = '\0';
|
||||
new_state.cwd_length = 0;
|
||||
}
|
||||
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH)) {
|
||||
free(new_state.cwd);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2011 The PHP Group |
|
||||
| Copyright (c) 1997-2010 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -131,8 +131,8 @@ typedef unsigned short mode_t;
|
||||
|
||||
#ifdef TSRM_WIN32
|
||||
CWD_API int php_sys_stat_ex(const char *path, struct stat *buf, int lstat);
|
||||
# define php_sys_stat(path, buf) php_sys_stat_ex(path, buf, 0)
|
||||
# define php_sys_lstat(path, buf) php_sys_stat_ex(path, buf, 1)
|
||||
CWD_API int php_sys_stat(const char *path, struct stat *buf);
|
||||
CWD_API int php_sys_lstat(const char *path, struct stat *buf);
|
||||
CWD_API int php_sys_readlink(const char *link, char *target, size_t target_len);
|
||||
#else
|
||||
# define php_sys_stat stat
|
||||
@@ -201,7 +201,7 @@ CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group, int li
|
||||
#define CWD_FILEPATH 1 /* resolve symlinks if file is exist otherwise expand */
|
||||
#define CWD_REALPATH 2 /* call realpath(), resolve symlinks. File must exist */
|
||||
|
||||
CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath TSRMLS_DC);
|
||||
CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath);
|
||||
|
||||
CWD_API char *tsrm_realpath(const char *path, char *real_path TSRMLS_DC);
|
||||
|
||||
@@ -267,7 +267,7 @@ CWD_API realpath_cache_bucket** realpath_cache_get_buckets(TSRMLS_D);
|
||||
#define VCWD_REALPATH(path, real_path) virtual_realpath(path, real_path TSRMLS_CC)
|
||||
#define VCWD_RENAME(oldname, newname) virtual_rename(oldname, newname TSRMLS_CC)
|
||||
#define VCWD_STAT(path, buff) virtual_stat(path, buff TSRMLS_CC)
|
||||
# define VCWD_LSTAT(path, buff) virtual_lstat(path, buff TSRMLS_CC)
|
||||
#define VCWD_LSTAT(path, buff) virtual_lstat(path, buff TSRMLS_CC)
|
||||
#define VCWD_UNLINK(path) virtual_unlink(path TSRMLS_CC)
|
||||
#define VCWD_MKDIR(pathname, mode) virtual_mkdir(pathname, mode TSRMLS_CC)
|
||||
#define VCWD_RMDIR(pathname) virtual_rmdir(pathname TSRMLS_CC)
|
||||
@@ -310,7 +310,7 @@ CWD_API realpath_cache_bucket** realpath_cache_get_buckets(TSRMLS_D);
|
||||
#define VCWD_OPENDIR(pathname) opendir(pathname)
|
||||
#define VCWD_POPEN(command, type) popen(command, type)
|
||||
#if defined(TSRM_WIN32)
|
||||
#define VCWD_ACCESS(pathname, mode) tsrm_win32_access(pathname, mode TSRMLS_CC)
|
||||
#define VCWD_ACCESS(pathname, mode) tsrm_win32_access(pathname, mode)
|
||||
#else
|
||||
#define VCWD_ACCESS(pathname, mode) access(pathname, mode)
|
||||
#endif
|
||||
|
||||
+8
-10
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2011 The PHP Group |
|
||||
| Copyright (c) 1997-2010 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -190,7 +190,7 @@ Finished:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
TSRM_API int tsrm_win32_access(const char *pathname, int mode TSRMLS_DC)
|
||||
TSRM_API int tsrm_win32_access(const char *pathname, int mode)
|
||||
{
|
||||
time_t t;
|
||||
HANDLE thread_token;
|
||||
@@ -208,6 +208,8 @@ TSRM_API int tsrm_win32_access(const char *pathname, int mode TSRMLS_DC)
|
||||
realpath_cache_bucket * bucket = NULL;
|
||||
char * real_path = NULL;
|
||||
|
||||
TSRMLS_FETCH();
|
||||
|
||||
if (mode == 1 /*X_OK*/) {
|
||||
DWORD type;
|
||||
return GetBinaryType(pathname, &type) ? 0 : -1;
|
||||
@@ -446,12 +448,10 @@ static HANDLE dupHandle(HANDLE fh, BOOL inherit) {
|
||||
|
||||
TSRM_API FILE *popen(const char *command, const char *type)
|
||||
{
|
||||
TSRMLS_FETCH();
|
||||
|
||||
return popen_ex(command, type, NULL, NULL TSRMLS_CC);
|
||||
return popen_ex(command, type, NULL, NULL);
|
||||
}
|
||||
|
||||
TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, char *env TSRMLS_DC)
|
||||
TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, char *env)
|
||||
{
|
||||
FILE *stream = NULL;
|
||||
int fno, type_len = strlen(type), read, mode;
|
||||
@@ -469,6 +469,8 @@ TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd,
|
||||
HANDLE token_user = NULL;
|
||||
BOOL asuser = TRUE;
|
||||
|
||||
TSRMLS_FETCH();
|
||||
|
||||
if (!type) {
|
||||
return NULL;
|
||||
}
|
||||
@@ -530,10 +532,6 @@ TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd,
|
||||
}
|
||||
|
||||
cmd = (char*)malloc(strlen(command)+strlen(TWG(comspec))+sizeof(" /c ")+2);
|
||||
if (!cmd) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
sprintf(cmd, "%s /c \"%s\"", TWG(comspec), command);
|
||||
if (asuser) {
|
||||
res = CreateProcessAsUser(token_user, NULL, cmd, &security, &security, security.bInheritHandle, dwCreateFlags, env, cwd, &startup, &process);
|
||||
|
||||
+3
-3
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2011 The PHP Group |
|
||||
| Copyright (c) 1997-2010 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -95,10 +95,10 @@ char * tsrm_win32_get_path_sid_key(const char *pathname TSRMLS_DC);
|
||||
TSRM_API void tsrm_win32_startup(void);
|
||||
TSRM_API void tsrm_win32_shutdown(void);
|
||||
|
||||
TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, char *env TSRMLS_DC);
|
||||
TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, char *env);
|
||||
TSRM_API FILE *popen(const char *command, const char *type);
|
||||
TSRM_API int pclose(FILE *stream);
|
||||
TSRM_API int tsrm_win32_access(const char *pathname, int mode TSRMLS_DC);
|
||||
TSRM_API int tsrm_win32_access(const char *pathname, int mode);
|
||||
TSRM_API int win32_utime(const char *filename, struct utimbuf *buf);
|
||||
|
||||
TSRM_API int shmget(int key, int size, int flags);
|
||||
|
||||
+3
-187
@@ -1,207 +1,23 @@
|
||||
$Id$
|
||||
|
||||
UPGRADE NOTES - PHP X.Y
|
||||
UPGRADE NOTES - PHP 5.3.4
|
||||
|
||||
1. Internal API changes
|
||||
a. virtual_file_ex
|
||||
b. stat/lstat support
|
||||
c. readlink support
|
||||
d. layout of some core ZE structures (zend_op_array, zend_class_entry, ...)
|
||||
e. Zend\zend_fast_cache.h has been removed
|
||||
f. streams that enclose private streams
|
||||
g. leak_variable
|
||||
h. API Signature changes
|
||||
i. new TSRM function expand_filepath_with_mode
|
||||
|
||||
2. Build system changes
|
||||
a. Unix build system changes
|
||||
b. Windows build system changes
|
||||
|
||||
|
||||
========================
|
||||
1. Internal API changes
|
||||
========================
|
||||
|
||||
a. virtual_file_ex
|
||||
|
||||
virtual_file_ex takes now a TSRM context as last parameter:
|
||||
CWD_API int virtual_file_ex(cwd_state *state, const char *path,
|
||||
verify_path_func verify_path, int use_realpath TSRLS_DC);
|
||||
|
||||
|
||||
b. stat/lstat support
|
||||
a. stat/lstat support
|
||||
|
||||
lstat is now available on all platforms. On unix-like platform
|
||||
php_sys_lstat is an alias to lstat (when avaible). On Windows it is now
|
||||
available using php_sys_lstat. php_sys_stat and php_sys_lstat usage is recommended
|
||||
instead of calling lstat directly, to ensure portability.
|
||||
|
||||
|
||||
c. readlink support
|
||||
b. readlink support
|
||||
|
||||
readlink is now available on all platforms. On unix-like platform
|
||||
php_sys_readlink is an alias to readlink (when avaible). On Windows it is now
|
||||
available using php_sys_readlink. php_sys_readlink usage is recommended
|
||||
instead of calling readlink directly, to ensure portability.
|
||||
|
||||
|
||||
d. layout of some core ZE structures (zend_op_array, zend_class_entry, ...)
|
||||
|
||||
. zend_function.pass_rest_by_reference is replaced by
|
||||
ZEND_ACC_PASS_REST_BY_REFERENCE in zend_function.fn_flags
|
||||
. zend_function.return_reference is replaced by ZEND_ACC_RETURN_REFERENCE
|
||||
in zend_function.fn_flags
|
||||
. zend_arg_info.required_num_args removed. it was needed only for internal
|
||||
functions. Now the first arg_info for internal function (which has special
|
||||
meaning) is represented by zend_internal_function_info structure.
|
||||
. zend_op_array.size, size_var, size_literal, current_brk_cont,
|
||||
backpatch_count moved into CG(context), because they are used only during
|
||||
compilation.
|
||||
. zend_op_array.start_op is moved into EG(start_op), because it's used
|
||||
only for 'interactive' execution of single top-level op-array.
|
||||
. zend_op_array.done_pass_two is replaced by ZEND_ACC_DONE_PASS_TWO in
|
||||
zend_op_array.fn_flags.
|
||||
. op_array.vars array is trimmed (reallocated) during pass_two.
|
||||
. zend_class_entry.constants_updated is replaced by
|
||||
ZEND_ACC_CONSTANTS_UPDATED in zend_class_entry.ce_flags
|
||||
. the size of zend_class_entry is reduced by sharing the same memory space
|
||||
by different information for internal and user classes.
|
||||
See zend_class_inttry.info union.
|
||||
|
||||
|
||||
e. Zend\zend_fast_cache.h
|
||||
|
||||
It should not have been used anymore since php5, but now this header has
|
||||
been removed. The following macros are not available anymore:
|
||||
|
||||
ZEND_FAST_ALLOC(p, type, fc_type)
|
||||
ZEND_FAST_FREE(p, fc_type)
|
||||
ZEND_FAST_ALLOC_REL(p, type, fc_type)
|
||||
ZEND_FAST_FREE_REL(p, fc_type)
|
||||
|
||||
Use emalloc, emalloc_rel, efree or efree_rel instead.
|
||||
|
||||
|
||||
f. Streams that enclose private streams
|
||||
|
||||
Some streams, like the temp:// stream, may enclose private streams. If the
|
||||
outer stream leaks due to a programming error or is not exposed through a
|
||||
zval (and therefore is not deleted when all the zvals are gone), it will
|
||||
be destroyed on shutdown.
|
||||
The problem is that the outer usually wants itself to close the inner stream,
|
||||
so that it may do any other shutdown action that requires the inner stream to
|
||||
be live (e.g. commit data to it). If the outer stream is exposed through a
|
||||
zval and the inner one isn't, this is not a problem because the outer stream
|
||||
will be freed when the zval is destroyed, which happens before the resources
|
||||
are destroyed on shutdown.
|
||||
On resource list shutdown, the cleanup happens in reverse order of resource
|
||||
creation, so if the inner stream was created in the opener of the outer stream,
|
||||
it will be destroyed first.
|
||||
The following functions were added to the streams API to force a predictable
|
||||
destruction order:
|
||||
|
||||
PHPAPI php_stream *php_stream_encloses(php_stream *enclosing, php_stream *enclosed);
|
||||
#define php_stream_free_enclosed(stream_enclosed, close_options)
|
||||
PHPAPI int _php_stream_free_enclosed(php_stream *stream_enclosed, int close_options TSRMLS_DC);
|
||||
|
||||
Additionally, the following member was added to php_stream:
|
||||
|
||||
struct _php_stream *enclosing_stream;
|
||||
|
||||
and the following macro was added:
|
||||
|
||||
#define PHP_STREAM_FREE_IGNORE_ENCLOSING 32
|
||||
|
||||
The function php_stream_encloses declares the first stream encloses the second.
|
||||
This has the effect that, when the inner stream is closed from a resource
|
||||
destructor it will abort and try to free its enclosing stream instead.
|
||||
To prevent this from happening when the inner stream is freed from the outer
|
||||
stream, the macro php_stream_free_enclosed should be used instead of
|
||||
php_stream_free/php_stream_close/php_stream_pclose, or the flag
|
||||
PHP_STREAM_FREE_IGNORE_ENCLOSING should be directly passed to php_stream_free.
|
||||
The outer stream cannot abstain, in its close callback, from closing the inner
|
||||
stream or clear the enclosing_stream pointer in its enclosed stream by calling
|
||||
php_stream_encloses with the 2nd argument NULL. If this is not done, there will
|
||||
be problems, so observe this requirement when using php_stream_encloses.
|
||||
|
||||
|
||||
g. leak_variable
|
||||
|
||||
The function leak_variable(variable [, leak_data]) was added. It is only
|
||||
available on debug builds. It increments the refcount of a zval or, if the
|
||||
second argument is true and the variable is either an object or a resource
|
||||
it increments the refcounts of those objects instead.
|
||||
|
||||
|
||||
h. API Signature changes
|
||||
|
||||
. zend_list_insert
|
||||
ZEND_API int zend_list_insert(void *ptr, int type TSRMLS_DC);
|
||||
call: zend_list_insert(a, SOMETYPE TSRMLS_CC);
|
||||
NB: If zend_list_insert is used to register a resource,
|
||||
ZEND_REGISTER_RESOURCE could be used instead.
|
||||
|
||||
. php_le_stream_context(TSRMLS_C)
|
||||
PHPAPI php_stream_context *php_stream_context_alloc(TSRMLS_D)
|
||||
call: context = php_stream_context_alloc(TSRMLS_C);
|
||||
|
||||
. php_stream_context_alloc
|
||||
PHPAPI php_stream_context *php_stream_context_alloc(TSRMLS_D);
|
||||
call: context = php_stream_context_alloc(TSRMLS_C);
|
||||
|
||||
. sapi_get_request_time(TSRMLS_D);
|
||||
SAPI_API double sapi_get_request_time(TSRMLS_D);
|
||||
|
||||
. sapi_register_default_post_reader
|
||||
SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(TSRMLS_D) TSRMLS_DC);
|
||||
|
||||
. sapi_register_treat_data
|
||||
SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC) TSRMLS_DC);
|
||||
|
||||
. sapi_register_input_filter
|
||||
SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC), unsigned int (*input_filter_init)(TSRMLS_D) TSRMLS_DC);
|
||||
|
||||
. tsrm_win32_access
|
||||
TSRM_API int tsrm_win32_access(const char *pathname, int mode TSRMLS_DC);
|
||||
|
||||
. popen_ex (win32)
|
||||
TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, char *env TSRMLS_DC);
|
||||
|
||||
. php_get_current_user
|
||||
PHPAPI php_get_current_user(TSRMLS_D)
|
||||
Call: char *user = php_get_current_user(TSRMLS_C);
|
||||
|
||||
. php_idate
|
||||
PHPAPI php_idate(char format, time_t ts, int localtime TSRMLS_DC)
|
||||
Call: int ret = php_idate(format, ts, localtime TSRMLS_CC)
|
||||
|
||||
. php_escape_html_entities
|
||||
(size_t parameters were ints, previous "quote_style" (now flags) has expanded meaning)
|
||||
PHPAPI char *php_escape_html_entities(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset TSRMLS_DC);
|
||||
|
||||
. php_escape_html_entities_ex
|
||||
PHPAPI char *php_escape_html_entities_ex(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset, zend_bool double_encode TSRMLS_DC);
|
||||
|
||||
. php_unescape_html_entities
|
||||
PHPAPI char *php_unescape_html_entities(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset TSRMLS_DC);
|
||||
|
||||
i.
|
||||
PHPAPI char *expand_filepath_with_mode(const char *filepath, char *real_path, const char *relative_to, size_t relative_to_len, int realpath_mode TSRMLS_DC);
|
||||
expand_filepath_with_mode lets define how realpath will behave, using one of the existing mode: CWD_EXPAND , CWD_FILEPATH or CWD_REALPATH.
|
||||
|
||||
========================
|
||||
2. Build system changes
|
||||
========================
|
||||
|
||||
a. Unix build system changes
|
||||
|
||||
- Changes in SAPI module build:
|
||||
. When adding new binary SAPI (executable, like CLI/CGI/FPM) use CLI config.m4 and Makefile.frag files as templates and replace CLI/cli with your SAPI name.
|
||||
|
||||
- New macros:
|
||||
. PHP_INIT_DTRACE(providerdesc, header-file, sources [, module])
|
||||
|
||||
|
||||
b. Windows build system changes
|
||||
-
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ libZend_la_SOURCES=\
|
||||
zend_objects_API.c zend_ts_hash.c zend_stream.c \
|
||||
zend_default_classes.c \
|
||||
zend_iterators.c zend_interfaces.c zend_exceptions.c \
|
||||
zend_strtod.c zend_closures.c zend_float.c zend_string.c zend_signal.c
|
||||
zend_strtod.c zend_closures.c zend_float.c
|
||||
|
||||
libZend_la_LDFLAGS =
|
||||
libZend_la_LIBADD = @ZEND_EXTRA_LIBS@
|
||||
|
||||
+4
-8
@@ -243,10 +243,6 @@ SOURCE=.\zend_stream.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_string.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_strtod.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -319,6 +315,10 @@ SOURCE=.\zend_extensions.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_fast_cache.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_globals.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -411,10 +411,6 @@ SOURCE=.\zend_stream.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_string.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_strtod.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
+14
-21
@@ -176,6 +176,13 @@ AC_ARG_ENABLE(inline-optimization,
|
||||
ZEND_INLINE_OPTIMIZATION=yes
|
||||
])
|
||||
|
||||
AC_ARG_ENABLE(zend-multibyte,
|
||||
[ --enable-zend-multibyte Compile with zend multibyte support], [
|
||||
ZEND_MULTIBYTE=$enableval
|
||||
],[
|
||||
ZEND_MULTIBYTE=no
|
||||
])
|
||||
|
||||
AC_MSG_CHECKING([virtual machine dispatch method])
|
||||
AC_MSG_RESULT($PHP_ZEND_VM)
|
||||
|
||||
@@ -188,6 +195,9 @@ AC_MSG_RESULT($ZEND_INLINE_OPTIMIZATION)
|
||||
AC_MSG_CHECKING(whether to enable Zend debugging)
|
||||
AC_MSG_RESULT($ZEND_DEBUG)
|
||||
|
||||
AC_MSG_CHECKING(whether to enable Zend multibyte)
|
||||
AC_MSG_RESULT($ZEND_MULTIBYTE)
|
||||
|
||||
case $PHP_ZEND_VM in
|
||||
SWITCH)
|
||||
AC_DEFINE(ZEND_VM_KIND,ZEND_VM_KIND_SWITCH,[virtual machine dispatch method])
|
||||
@@ -222,6 +232,10 @@ if test "$ZEND_MAINTAINER_ZTS" = "yes"; then
|
||||
LIBZEND_CPLUSPLUS_CHECKS
|
||||
fi
|
||||
|
||||
if test "$ZEND_MULTIBYTE" = "yes"; then
|
||||
AC_DEFINE(ZEND_MULTIBYTE, 1, [ ])
|
||||
fi
|
||||
|
||||
changequote({,})
|
||||
if test -n "$GCC" && test "$ZEND_INLINE_OPTIMIZATION" != "yes"; then
|
||||
INLINE_CFLAGS=`echo $ac_n "$CFLAGS $ac_c" | sed s/-O[0-9s]*//`
|
||||
@@ -392,22 +406,8 @@ int main()
|
||||
|
||||
AC_CHECK_FUNCS(mremap)
|
||||
|
||||
|
||||
AC_CHECK_FUNC(sigaction, [
|
||||
ZEND_SIGNALS=yes
|
||||
AC_DEFINE(ZEND_SIGNALS, 1, [Use zend signal handling])
|
||||
AC_DEFINE(HAVE_SIGACTION, 1, [Whether sigaction() is available])
|
||||
], [
|
||||
ZEND_SIGNALS=no
|
||||
])
|
||||
if test "$ZEND_SIGNALS" = "yes"; then
|
||||
CFLAGS="$CFLAGS -DZEND_SIGNALS"
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING(whether to enable zend signal handling)
|
||||
AC_MSG_RESULT($ZEND_SIGNALS)
|
||||
|
||||
])
|
||||
|
||||
AC_DEFUN([LIBZEND_CPLUSPLUS_CHECKS],[
|
||||
|
||||
@@ -419,11 +419,4 @@ if test -r "/dev/urandom" && test -c "/dev/urandom"; then
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_CHECKING(whether /dev/arandom exists)
|
||||
if test -r "/dev/arandom" && test -c "/dev/arandom"; then
|
||||
AC_DEFINE([HAVE_DEV_ARANDOM], 1, [Define if the target system has /dev/arandom device])
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
fi
|
||||
+4
-8
@@ -273,10 +273,6 @@ SOURCE=.\zend_stream.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_string.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_strtod.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -349,6 +345,10 @@ SOURCE=.\zend_extensions.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_fast_cache.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_globals.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -445,10 +445,6 @@ SOURCE=.\zend_stream.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_string.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_strtod.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
+127
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
| available through the world-wide-web at the following url: |
|
||||
| http://www.zend.com/license/2_00.txt. |
|
||||
| If you did not receive a copy of the Zend license and are unable to |
|
||||
| obtain it through the world-wide-web, please send a note to |
|
||||
| license@zend.com so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Authors: Andi Gutmans <andi@zend.com> |
|
||||
| Zeev Suraski <zeev@zend.com> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ >= 4
|
||||
# define ZEND_API __attribute__ ((visibility("default")))
|
||||
# define ZEND_DLEXPORT __attribute__ ((visibility("default")))
|
||||
#else
|
||||
# define ZEND_API
|
||||
# define ZEND_DLEXPORT
|
||||
#endif
|
||||
|
||||
#define ZEND_DLIMPORT
|
||||
|
||||
@TOP@
|
||||
|
||||
#undef uint
|
||||
#undef ulong
|
||||
|
||||
/* Define if you want to enable memory limit support */
|
||||
#define MEMORY_LIMIT 0
|
||||
|
||||
@BOTTOM@
|
||||
|
||||
#ifndef ZEND_ACCONFIG_H_NO_C_PROTOS
|
||||
|
||||
#ifdef HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_SELECT_H
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_IEEEFP_H
|
||||
# include <ieeefp.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#if ZEND_BROKEN_SPRINTF
|
||||
int zend_sprintf(char *buffer, const char *format, ...);
|
||||
#else
|
||||
# define zend_sprintf sprintf
|
||||
#endif
|
||||
|
||||
#include <math.h>
|
||||
|
||||
/* To enable the is_nan, is_infinite and is_finite PHP functions */
|
||||
#ifdef NETWARE
|
||||
#define HAVE_ISNAN 1
|
||||
#define HAVE_ISINF 1
|
||||
#define HAVE_ISFINITE 1
|
||||
#endif
|
||||
|
||||
#ifndef zend_isnan
|
||||
#ifdef HAVE_ISNAN
|
||||
#define zend_isnan(a) isnan(a)
|
||||
#elif defined(HAVE_FPCLASS)
|
||||
#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN))
|
||||
#else
|
||||
#define zend_isnan(a) 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_ISINF
|
||||
#define zend_isinf(a) isinf(a)
|
||||
#elif defined(INFINITY)
|
||||
/* Might not work, but is required by ISO C99 */
|
||||
#define zend_isinf(a) (((a)==INFINITY)?1:0)
|
||||
#elif defined(HAVE_FPCLASS)
|
||||
#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF))
|
||||
#else
|
||||
#define zend_isinf(a) 0
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FINITE
|
||||
#define zend_finite(a) finite(a)
|
||||
#elif defined(HAVE_ISFINITE) || defined(isfinite)
|
||||
#define zend_finite(a) isfinite(a)
|
||||
#elif defined(fpclassify)
|
||||
#define zend_finite(a) ((fpclassify((a))!=FP_INFINITE&&fpclassify((a))!=FP_NAN)?1:0)
|
||||
#else
|
||||
#define zend_finite(a) (zend_isnan(a) ? 0 : zend_isinf(a) ? 0 : 1)
|
||||
#endif
|
||||
|
||||
#endif /* ifndef ZEND_ACCONFIG_H_NO_C_PROTOS */
|
||||
|
||||
#ifdef NETWARE
|
||||
#ifdef USE_WINSOCK
|
||||
#/*This detection against winsock is of no use*/ undef HAVE_SOCKLEN_T
|
||||
#/*This detection against winsock is of no use*/ undef HAVE_SYS_SOCKET_H
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* tab-width: 4
|
||||
* c-basic-offset: 4
|
||||
* indent-tabs-mode: t
|
||||
* End:
|
||||
*/
|
||||
+1
-1
@@ -4,7 +4,7 @@ dnl This file contains local autoconf functions.
|
||||
|
||||
AC_DEFUN([LIBZEND_BISON_CHECK],[
|
||||
# we only support certain bison versions
|
||||
bison_version_list="1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5"
|
||||
bison_version_list="1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3"
|
||||
|
||||
# for standalone build of Zend Engine
|
||||
test -z "$SED" && SED=sed
|
||||
|
||||
@@ -3,6 +3,7 @@ if (function_exists("date_default_timezone_set")) {
|
||||
date_default_timezone_set("UTC");
|
||||
}
|
||||
|
||||
date_default_timezone_set('UTC');
|
||||
function simple() {
|
||||
$a = 0;
|
||||
for ($i = 0; $i < 1000000; $i++)
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ $(makefile_in_files): $(makefile_am_files)
|
||||
aclocal.m4: configure.in acinclude.m4
|
||||
aclocal
|
||||
|
||||
$(config_h_in): configure.in
|
||||
$(config_h_in): configure.in acconfig.h
|
||||
# explicitly remove target since autoheader does not seem to work
|
||||
# correctly otherwise (timestamps are not updated)
|
||||
@rm -f $@
|
||||
|
||||
@@ -11,105 +11,6 @@ AM_PROG_CC_STDC
|
||||
ZEND_VERSION=$VERSION
|
||||
AC_ZEND_C_BIGENDIAN
|
||||
|
||||
AH_TOP([
|
||||
#if defined(__GNUC__) && __GNUC__ >= 4
|
||||
# define ZEND_API __attribute__ ((visibility("default")))
|
||||
# define ZEND_DLEXPORT __attribute__ ((visibility("default")))
|
||||
#else
|
||||
# define ZEND_API
|
||||
# define ZEND_DLEXPORT
|
||||
#endif
|
||||
|
||||
#define ZEND_DLIMPORT
|
||||
|
||||
#undef uint
|
||||
#undef ulong
|
||||
|
||||
/* Define if you want to enable memory limit support */
|
||||
#define MEMORY_LIMIT 0
|
||||
])
|
||||
|
||||
AH_BOTTOM([
|
||||
#ifndef ZEND_ACCONFIG_H_NO_C_PROTOS
|
||||
|
||||
#ifdef HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_SELECT_H
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_IEEEFP_H
|
||||
# include <ieeefp.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#if ZEND_BROKEN_SPRINTF
|
||||
int zend_sprintf(char *buffer, const char *format, ...);
|
||||
#else
|
||||
# define zend_sprintf sprintf
|
||||
#endif
|
||||
|
||||
#include <math.h>
|
||||
|
||||
/* To enable the is_nan, is_infinite and is_finite PHP functions */
|
||||
#ifdef NETWARE
|
||||
#define HAVE_ISNAN 1
|
||||
#define HAVE_ISINF 1
|
||||
#define HAVE_ISFINITE 1
|
||||
#endif
|
||||
|
||||
#ifndef zend_isnan
|
||||
#ifdef HAVE_ISNAN
|
||||
#define zend_isnan(a) isnan(a)
|
||||
#elif defined(HAVE_FPCLASS)
|
||||
#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN))
|
||||
#else
|
||||
#define zend_isnan(a) 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_ISINF
|
||||
#define zend_isinf(a) isinf(a)
|
||||
#elif defined(INFINITY)
|
||||
/* Might not work, but is required by ISO C99 */
|
||||
#define zend_isinf(a) (((a)==INFINITY)?1:0)
|
||||
#elif defined(HAVE_FPCLASS)
|
||||
#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF))
|
||||
#else
|
||||
#define zend_isinf(a) 0
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FINITE
|
||||
#define zend_finite(a) finite(a)
|
||||
#elif defined(HAVE_ISFINITE) || defined(isfinite)
|
||||
#define zend_finite(a) isfinite(a)
|
||||
#elif defined(fpclassify)
|
||||
#define zend_finite(a) ((fpclassify((a))!=FP_INFINITE&&fpclassify((a))!=FP_NAN)?1:0)
|
||||
#else
|
||||
#define zend_finite(a) (zend_isnan(a) ? 0 : zend_isinf(a) ? 0 : 1)
|
||||
#endif
|
||||
|
||||
#endif /* ifndef ZEND_ACCONFIG_H_NO_C_PROTOS */
|
||||
|
||||
#ifdef NETWARE
|
||||
#ifdef USE_WINSOCK
|
||||
#/*This detection against winsock is of no use*/ undef HAVE_SOCKLEN_T
|
||||
#/*This detection against winsock is of no use*/ undef HAVE_SYS_SOCKET_H
|
||||
#endif
|
||||
#endif
|
||||
])
|
||||
|
||||
dnl We want this one before the checks, so the checks can modify CFLAGS.
|
||||
test -z "$CFLAGS" && auto_cflags=1
|
||||
|
||||
|
||||
@@ -1,321 +0,0 @@
|
||||
<?php
|
||||
|
||||
function hallo() {
|
||||
}
|
||||
|
||||
function simpleucall($n) {
|
||||
for ($i = 0; $i < $n; $i++)
|
||||
hallo();
|
||||
}
|
||||
|
||||
function simpleudcall($n) {
|
||||
for ($i = 0; $i < $n; $i++)
|
||||
hallo2();
|
||||
}
|
||||
|
||||
function hallo2() {
|
||||
}
|
||||
|
||||
function simpleicall($n) {
|
||||
for ($i = 0; $i < $n; $i++)
|
||||
func_num_args();
|
||||
}
|
||||
|
||||
class Foo {
|
||||
static $a = 0;
|
||||
public $b = 0;
|
||||
const TEST = 0;
|
||||
|
||||
static function read_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = self::$a;
|
||||
}
|
||||
}
|
||||
|
||||
static function write_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
self::$a = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static function isset_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = isset(self::$a);
|
||||
}
|
||||
}
|
||||
|
||||
static function empty_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = empty(self::$a);
|
||||
}
|
||||
}
|
||||
|
||||
static function f() {
|
||||
}
|
||||
|
||||
static function call_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
self::f();
|
||||
}
|
||||
}
|
||||
|
||||
function read_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $this->b;
|
||||
}
|
||||
}
|
||||
|
||||
function write_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$this->b = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function assign_add_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$this->b += 2;
|
||||
}
|
||||
}
|
||||
|
||||
function pre_inc_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
++$this->b;
|
||||
}
|
||||
}
|
||||
|
||||
function pre_dec_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
--$this->b;
|
||||
}
|
||||
}
|
||||
|
||||
function post_inc_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$this->b++;
|
||||
}
|
||||
}
|
||||
|
||||
function post_dec_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$this->b--;
|
||||
}
|
||||
}
|
||||
|
||||
function isset_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = isset($this->b);
|
||||
}
|
||||
}
|
||||
|
||||
function empty_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = empty($this->b);
|
||||
}
|
||||
}
|
||||
|
||||
function g() {
|
||||
}
|
||||
|
||||
function call($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$this->g();
|
||||
}
|
||||
}
|
||||
|
||||
function read_const($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $this::TEST;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function read_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = Foo::$a;
|
||||
}
|
||||
}
|
||||
|
||||
function write_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
Foo::$a = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function isset_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = isset(Foo::$a);
|
||||
}
|
||||
}
|
||||
|
||||
function empty_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = empty(Foo::$a);
|
||||
}
|
||||
}
|
||||
|
||||
function call_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
Foo::f();
|
||||
}
|
||||
}
|
||||
|
||||
function create_object($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = new Foo();
|
||||
}
|
||||
}
|
||||
|
||||
define('TEST', null);
|
||||
|
||||
function read_const($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = TEST;
|
||||
}
|
||||
}
|
||||
|
||||
function read_auto_global($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $_GET;
|
||||
}
|
||||
}
|
||||
|
||||
$g_var = 0;
|
||||
|
||||
function read_global_var($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $GLOBALS['g_var'];
|
||||
}
|
||||
}
|
||||
|
||||
function read_hash($n) {
|
||||
$hash = array('test' => 0);
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $hash['test'];
|
||||
}
|
||||
}
|
||||
|
||||
function read_str_offset($n) {
|
||||
$str = "test";
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $str[1];
|
||||
}
|
||||
}
|
||||
|
||||
/*****/
|
||||
|
||||
function empty_loop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
}
|
||||
}
|
||||
|
||||
function getmicrotime()
|
||||
{
|
||||
$t = gettimeofday();
|
||||
return ($t['sec'] + $t['usec'] / 1000000);
|
||||
}
|
||||
|
||||
function start_test()
|
||||
{
|
||||
ob_start();
|
||||
return getmicrotime();
|
||||
}
|
||||
|
||||
function end_test($start, $name, $overhead = null)
|
||||
{
|
||||
global $total;
|
||||
global $last_time;
|
||||
$end = getmicrotime();
|
||||
ob_end_clean();
|
||||
$last_time = $end-$start;
|
||||
$total += $last_time;
|
||||
$num = number_format($last_time,3);
|
||||
$pad = str_repeat(" ", 24-strlen($name)-strlen($num));
|
||||
if (is_null($overhead)) {
|
||||
echo $name.$pad.$num."\n";
|
||||
} else {
|
||||
$num2 = number_format($last_time - $overhead,3);
|
||||
echo $name.$pad.$num." ".$num2."\n";
|
||||
}
|
||||
ob_start();
|
||||
return getmicrotime();
|
||||
}
|
||||
|
||||
function total()
|
||||
{
|
||||
global $total;
|
||||
$pad = str_repeat("-", 24);
|
||||
echo $pad."\n";
|
||||
$num = number_format($total,3);
|
||||
$pad = str_repeat(" ", 24-strlen("Total")-strlen($num));
|
||||
echo "Total".$pad.$num."\n";
|
||||
}
|
||||
|
||||
const N = 5000000;
|
||||
|
||||
$t0 = $t = start_test();
|
||||
empty_loop(N);
|
||||
$t = end_test($t, 'empty_loop');
|
||||
$overhead = $last_time;
|
||||
simpleucall(N);
|
||||
$t = end_test($t, 'func()', $overhead);
|
||||
simpleudcall(N);
|
||||
$t = end_test($t, 'undef_func()', $overhead);
|
||||
simpleicall(N);
|
||||
$t = end_test($t, 'int_func()', $overhead);
|
||||
Foo::read_static(N);
|
||||
$t = end_test($t, '$x = self::$x', $overhead);
|
||||
Foo::write_static(N);
|
||||
$t = end_test($t, 'self::$x = 0', $overhead);
|
||||
Foo::isset_static(N);
|
||||
$t = end_test($t, 'isset(self::$x)', $overhead);
|
||||
Foo::empty_static(N);
|
||||
$t = end_test($t, 'empty(self::$x)', $overhead);
|
||||
read_static(N);
|
||||
$t = end_test($t, '$x = Foo::$x', $overhead);
|
||||
write_static(N);
|
||||
$t = end_test($t, 'Foo::$x = 0', $overhead);
|
||||
isset_static(N);
|
||||
$t = end_test($t, 'isset(Foo::$x)', $overhead);
|
||||
empty_static(N);
|
||||
$t = end_test($t, 'empty(Foo::$x)', $overhead);
|
||||
Foo::call_static(N);
|
||||
$t = end_test($t, 'self::f()', $overhead);
|
||||
call_static(N);
|
||||
$t = end_test($t, 'Foo::f()', $overhead);
|
||||
$x = new Foo();
|
||||
$x->read_prop(N);
|
||||
$t = end_test($t, '$x = $this->x', $overhead);
|
||||
$x->write_prop(N);
|
||||
$t = end_test($t, '$this->x = 0', $overhead);
|
||||
$x->assign_add_prop(N);
|
||||
$t = end_test($t, '$this->x += 2', $overhead);
|
||||
$x->pre_inc_prop(N);
|
||||
$t = end_test($t, '++$this->x', $overhead);
|
||||
$x->pre_dec_prop(N);
|
||||
$t = end_test($t, '--$this->x', $overhead);
|
||||
$x->post_inc_prop(N);
|
||||
$t = end_test($t, '$this->x++', $overhead);
|
||||
$x->post_dec_prop(N);
|
||||
$t = end_test($t, '$this->x--', $overhead);
|
||||
$x->isset_prop(N);
|
||||
$t = end_test($t, 'isset($this->x)', $overhead);
|
||||
$x->empty_prop(N);
|
||||
$t = end_test($t, 'empty($this->x)', $overhead);
|
||||
$x->call(N);
|
||||
$t = end_test($t, '$this->f()', $overhead);
|
||||
$x->read_const(N);
|
||||
$t = end_test($t, '$x = Foo::TEST', $overhead);
|
||||
create_object(N);
|
||||
$t = end_test($t, 'new Foo()', $overhead);
|
||||
read_const(N);
|
||||
$t = end_test($t, '$x = TEST', $overhead);
|
||||
read_auto_global(N);
|
||||
$t = end_test($t, '$x = $_GET', $overhead);
|
||||
read_global_var(N);
|
||||
$t = end_test($t, '$x = $GLOBALS[\'v\']', $overhead);
|
||||
read_hash(N);
|
||||
$t = end_test($t, '$x = $hash[\'v\']', $overhead);
|
||||
read_str_offset(N);
|
||||
$t = end_test($t, '$x = $str[0]', $overhead);
|
||||
total($t0, "Total");
|
||||
+1
-1
@@ -21,5 +21,5 @@ print "ok\n";
|
||||
Notice: Trying to get property of non-object in %s on line %d
|
||||
ok
|
||||
|
||||
Warning: Creating default object from empty value in %s on line %d
|
||||
Strict Standards: Creating default object from empty value in %s on line %d
|
||||
ok
|
||||
+2
-2
@@ -26,6 +26,6 @@ Notice: Undefined variable: arr in %s on line %d
|
||||
|
||||
Notice: Trying to get property of non-object in %s on line %d
|
||||
|
||||
Warning: Creating default object from empty value in %s on line %d
|
||||
Strict Standards: Creating default object from empty value in %s on line %d
|
||||
|
||||
Warning: Creating default object from empty value in %s on line %d
|
||||
Strict Standards: Creating default object from empty value in %s on line %d
|
||||
@@ -12,4 +12,4 @@ foo(123);
|
||||
--EXPECTF--
|
||||
3
|
||||
|
||||
Catchable fatal error: Argument 1 passed to foo() must be of the type array, integer given, called in %sarray_type_hint_001.php on line 7 and defined in %sarray_type_hint_001.php on line 2
|
||||
Catchable fatal error: Argument 1 passed to foo() must be an array, integer given, called in %sarray_type_hint_001.php on line 7 and defined in %sarray_type_hint_001.php on line 2
|
||||
@@ -23,6 +23,7 @@ echo isset($simpleString[0])?"ok\n":"bug\n";
|
||||
echo isset($simpleString["0"])?"ok\n":"bug\n";
|
||||
echo isset($simpleString["16"])?"ok\n":"bug\n";
|
||||
echo isset($simpleString["17"])?"bug\n":"ok\n";
|
||||
echo isset($simpleString["wrong"][0])?"bug\n":"ok\n";
|
||||
echo $simpleString->wrong === null?"ok\n":"bug\n";
|
||||
echo $simpleString["wrong"] === "B"?"ok\n":"bug\n";
|
||||
echo $simpleString["0"] === "B"?"ok\n":"bug\n";
|
||||
@@ -43,6 +44,7 @@ ok
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
|
||||
Notice: Trying to get property of non-object in %sbug31098.php on line %d
|
||||
ok
|
||||
|
||||
@@ -4,6 +4,7 @@ Bug #35655 (whitespace following end of heredoc is lost)
|
||||
highlight.string = #DD0000
|
||||
highlight.comment = #FF8000
|
||||
highlight.keyword = #007700
|
||||
highlight.bg = #FFFFFF
|
||||
highlight.default = #0000BB
|
||||
highlight.html = #000000
|
||||
--FILE--
|
||||
|
||||
@@ -63,18 +63,10 @@ print "\nDone\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
|
||||
Notice: Uninitialized string offset: %i in %s on line 6
|
||||
|
||||
Notice: Uninitialized string offset: 0 in %s on line 10
|
||||
|
||||
Notice: Uninitialized string offset: 0 in %s on line 12
|
||||
|
||||
Notice: Uninitialized string offset: %i in %s on line 14
|
||||
|
||||
Notice: Uninitialized string offset: %i in %s on line 16
|
||||
|
||||
Notice: Uninitialized string offset: 0 in %s on line 18
|
||||
|
||||
Notice: Uninitialized string offset: 4 in %s on line 28
|
||||
|
||||
Notice: Uninitialized string offset: 4 in %s on line 34
|
||||
@@ -85,8 +77,6 @@ Notice: Uninitialized string offset: 4 in %s on line 42
|
||||
|
||||
Notice: Uninitialized string offset: 4 in %s on line 46
|
||||
|
||||
Notice: Uninitialized string offset: 12 in %s on line 50
|
||||
|
||||
Notice: Uninitialized string offset: 12 in %s on line 52
|
||||
b
|
||||
Done
|
||||
@@ -1,7 +1,5 @@
|
||||
--TEST--
|
||||
Bug #39304 (Segmentation fault with list unpacking of string offset)
|
||||
--SKIPIF--
|
||||
<?php if (version_compare(zend_version(), '2.4.0', '>=')) die('skip ZendEngine 2.4 needed'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
$s = "";
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
--TEST--
|
||||
Bug #39304 (Segmentation fault with list unpacking of string offset)
|
||||
--SKIPIF--
|
||||
<?php if (version_compare(zend_version(), '2.4.0', '<')) die('skip ZendEngine 2.4 needed'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
$s = "";
|
||||
list($a, $b) = $s[0];
|
||||
var_dump($a,$b);
|
||||
?>
|
||||
--EXPECTF--
|
||||
Notice: Uninitialized string offset: 0 in %sbug39304_2_4.php on line 3
|
||||
|
||||
Notice: Uninitialized string offset: 1 in %sbug39304_2_4.php on line 3
|
||||
|
||||
Notice: Uninitialized string offset: 0 in %sbug39304_2_4.php on line 3
|
||||
string(0) ""
|
||||
string(0) ""
|
||||
@@ -4,6 +4,7 @@ Bug #42767 (highlight_string() truncates trailing comments)
|
||||
highlight.string = #DD0000
|
||||
highlight.comment = #FF8000
|
||||
highlight.keyword = #007700
|
||||
highlight.bg = #FFFFFF
|
||||
highlight.default = #0000BB
|
||||
highlight.html = #000000
|
||||
--FILE--
|
||||
|
||||
@@ -20,5 +20,5 @@ var_dump( ArrayProperty::$array );
|
||||
--EXPECT--
|
||||
array(1) {
|
||||
[1]=>
|
||||
int(42)
|
||||
int(23)
|
||||
}
|
||||
@@ -20,7 +20,7 @@ var_dump(
|
||||
--EXPECTF--
|
||||
Parse error: syntax error, unexpected '}' in %s(%d) : runtime-created function on line 1
|
||||
|
||||
Parse error: syntax error, unexpected end of file in %s(%d) : runtime-created function on line 1
|
||||
Parse error: syntax error, unexpected $end in %s(%d) : runtime-created function on line 1
|
||||
bool(false)
|
||||
int(2)
|
||||
bool(false)
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
--TEST--
|
||||
Bug #50816 (Using class constants in array definition fails)
|
||||
--FILE--
|
||||
<?php
|
||||
define("ONE", 1);
|
||||
define("TWO", 1);
|
||||
|
||||
class Foo {
|
||||
const ONE = 1;
|
||||
const TWO = 1;
|
||||
|
||||
public static $mapWithConst = array(self::ONE => 'one', self::TWO => 'two',);
|
||||
|
||||
public static $mapWithConst1 = array(1 => 'one', self::TWO => 'two',);
|
||||
public static $mapWithConst2 = array(self::ONE => 'one', 1 => 'two',);
|
||||
|
||||
public static $mapWithoutConst = array(1 => 'one', 1 => 'two',);
|
||||
}
|
||||
|
||||
$mapWithConst = array(1 => 'one', 1 => 'two',);
|
||||
|
||||
$mapWithoutConst = array(Foo::ONE => 'one', Foo::TWO => 'two',);
|
||||
$mapWithoutConst0 = array(1 => 'one', 1 => 'two',);
|
||||
$mapWithoutConst1 = array(ONE => 'one', 1 => 'two',);
|
||||
$mapWithoutConst2 = array(1 => 'one', TWO => 'two',);
|
||||
$mapWithoutConst3 = array(ONE => 'one', TWO => 'two',);
|
||||
|
||||
var_dump(Foo::$mapWithConst[1]);
|
||||
var_dump(Foo::$mapWithConst1[1]);
|
||||
var_dump(Foo::$mapWithConst2[1]);
|
||||
var_dump(Foo::$mapWithoutConst[1]);
|
||||
var_dump($mapWithConst[1]);
|
||||
var_dump($mapWithoutConst[1]);
|
||||
var_dump($mapWithoutConst0[1]);
|
||||
var_dump($mapWithoutConst1[1]);
|
||||
var_dump($mapWithoutConst2[1]);
|
||||
var_dump($mapWithoutConst3[1]);
|
||||
--EXPECT--
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
@@ -1,18 +0,0 @@
|
||||
--TEST--
|
||||
Bug #51421 (Abstract __construct constructor argument list not enforced)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class ExampleClass {}
|
||||
|
||||
abstract class TestInterface {
|
||||
abstract public function __construct(ExampleClass $var);
|
||||
}
|
||||
|
||||
class Test extends TestInterface {
|
||||
public function __construct() {}
|
||||
}
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Declaration of Test::__construct() must be compatible with that of TestInterface::__construct() in %s on line %d
|
||||
+12
-37
@@ -13,63 +13,38 @@ foo()->a->b++;
|
||||
foo()->a += 2;
|
||||
foo()->a->b += 2;
|
||||
|
||||
foo()[0] = 1;
|
||||
foo()[0][0] = 2;
|
||||
foo()[0]++;
|
||||
foo()[0][0]++;
|
||||
foo()[0] += 2;
|
||||
foo()[0][0] += 2;
|
||||
|
||||
//foo()[0] = 1;
|
||||
//foo()[0][0] = 2;
|
||||
//foo()[0]++;
|
||||
//foo()[0][0]++;
|
||||
//foo()[0] += 2;
|
||||
//foo()[0][0] += 2;
|
||||
var_dump(foo());
|
||||
?>
|
||||
--EXPECTF--
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Warning: Creating default object from empty value in %sbug52041.php on line 6
|
||||
Strict Standards: Creating default object from empty value in %sbug52041.php on line 6
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Warning: Creating default object from empty value in %sbug52041.php on line 7
|
||||
Strict Standards: Creating default object from empty value in %sbug52041.php on line 7
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Warning: Creating default object from empty value in %sbug52041.php on line 8
|
||||
Strict Standards: Creating default object from empty value in %sbug52041.php on line 8
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Warning: Creating default object from empty value in %sbug52041.php on line 9
|
||||
Strict Standards: Creating default object from empty value in %sbug52041.php on line 9
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Warning: Creating default object from empty value in %sbug52041.php on line 10
|
||||
Strict Standards: Creating default object from empty value in %sbug52041.php on line 10
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Warning: Creating default object from empty value in %sbug52041.php on line 11
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Notice: Undefined variable: x in %stests/bug52041.php on line 3
|
||||
|
||||
Notice: Undefined offset: 0 in %sbug52041.php on line 15
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Notice: Undefined offset: 0 in %sbug52041.php on line 16
|
||||
|
||||
Notice: Undefined offset: 0 in %sbug52041.php on line 16
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Notice: Undefined offset: 0 in %sbug52041.php on line 17
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Notice: Undefined offset: 0 in %sbug52041.php on line 18
|
||||
|
||||
Notice: Undefined offset: 0 in %sbug52041.php on line 18
|
||||
Strict Standards: Creating default object from empty value in %sbug52041.php on line 11
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
NULL
|
||||
@@ -7,6 +7,5 @@ preg_match('//', '', $data->info);
|
||||
var_dump($data);
|
||||
?>
|
||||
--EXPECTF--
|
||||
|
||||
Warning: Attempt to modify property of non-object in %sbug52237.php on line 3
|
||||
string(4) "test"
|
||||
@@ -1,83 +0,0 @@
|
||||
--TEST--
|
||||
Bug #52614 (Memory leak when writing on uninitialized variable returned from method call)
|
||||
--FILE--
|
||||
<?php
|
||||
class foo {
|
||||
public $a1;
|
||||
public $a2 = array();
|
||||
public $a3;
|
||||
public $o1;
|
||||
public $o2;
|
||||
|
||||
public function f1() {
|
||||
return $this->a1;
|
||||
}
|
||||
|
||||
public function f2() {
|
||||
return $this->a2;
|
||||
}
|
||||
|
||||
public function f3() {
|
||||
$this->a3 = array();
|
||||
return $this->a3;
|
||||
}
|
||||
|
||||
public function f4() {
|
||||
return $this->o1;
|
||||
}
|
||||
|
||||
public function f5() {
|
||||
$this->o2 = new stdClass;
|
||||
return $this->o2;
|
||||
}
|
||||
|
||||
public function &f6() {
|
||||
return $this->a1;
|
||||
}
|
||||
|
||||
public function f7(&$x) {
|
||||
$x = 2;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$foo = new foo;
|
||||
|
||||
$foo->f1()[0] = 1;
|
||||
var_dump($foo->a1);
|
||||
|
||||
$foo->f2()[0] = 1;
|
||||
var_dump($foo->a2);
|
||||
|
||||
$foo->f3()[0] = 1;
|
||||
var_dump($foo->a3);
|
||||
|
||||
$foo->f4()->a = 1;
|
||||
var_dump($foo->o1);
|
||||
|
||||
$foo->f5()->a = 1;
|
||||
var_dump($foo->o2);
|
||||
|
||||
$foo->a1[0] = 1;
|
||||
$foo->f7($foo->f6()[0]);
|
||||
var_dump($foo->a1[0]);
|
||||
$foo->f1()[0]++;
|
||||
var_dump($foo->a1[0]);
|
||||
$foo->f6()[0]++;
|
||||
var_dump($foo->a1[0]);
|
||||
--EXPECTF--
|
||||
NULL
|
||||
array(0) {
|
||||
}
|
||||
array(0) {
|
||||
}
|
||||
|
||||
Warning: Creating default object from empty value in %sbug52614.php on line 52
|
||||
NULL
|
||||
object(stdClass)#%d (1) {
|
||||
["a"]=>
|
||||
int(1)
|
||||
}
|
||||
int(2)
|
||||
int(2)
|
||||
int(3)
|
||||
@@ -1,23 +0,0 @@
|
||||
--TEST--
|
||||
Bug #52940 (call_user_func_array still allows call-time pass-by-reference)
|
||||
--FILE--
|
||||
<?php
|
||||
function foo($a) {
|
||||
$a++;
|
||||
var_dump($a);
|
||||
}
|
||||
function bar(&$a) {
|
||||
$a++;
|
||||
var_dump($a);
|
||||
}
|
||||
$a = 1;
|
||||
call_user_func_array("foo", array(&$a));
|
||||
var_dump($a);
|
||||
call_user_func_array("bar", array(&$a));
|
||||
var_dump($a);
|
||||
?>
|
||||
--EXPECT--
|
||||
int(2)
|
||||
int(1)
|
||||
int(2)
|
||||
int(2)
|
||||
@@ -1,17 +0,0 @@
|
||||
--TEST--
|
||||
Bug #53347 Segfault accessing static method
|
||||
--FILE--
|
||||
<?php class ezcConsoleOutput
|
||||
{
|
||||
protected static $color = array( 'gray' => 30 );
|
||||
|
||||
public static function isValidFormatCode( $type, $key )
|
||||
{
|
||||
return isset( self::${$type}[$key] );
|
||||
}
|
||||
}
|
||||
|
||||
var_dump( ezcConsoleOutput::isValidFormatCode( 'color', 'gray' ) );
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(true)
|
||||
@@ -1,33 +0,0 @@
|
||||
--TEST--
|
||||
Bug #53511 (Exceptions are lost in case an exception is thrown in catch operator)
|
||||
--FILE--
|
||||
<?php
|
||||
class Foo {
|
||||
function __destruct() {
|
||||
throw new Exception("ops 1");
|
||||
}
|
||||
}
|
||||
|
||||
function test() {
|
||||
$e = new Foo();
|
||||
try {
|
||||
throw new Exception("ops 2");
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage()."\n";
|
||||
}
|
||||
}
|
||||
|
||||
test();
|
||||
echo "bug\n";
|
||||
--EXPECTF--
|
||||
Fatal error: Uncaught exception 'Exception' with message 'ops 2' in %sbug53511.php:11
|
||||
Stack trace:
|
||||
#0 %sbug53511.php(17): test()
|
||||
#1 {main}
|
||||
|
||||
Next exception 'Exception' with message 'ops 1' in %sbug53511.php:4
|
||||
Stack trace:
|
||||
#0 %sbug53511.php(12): Foo->__destruct()
|
||||
#1 %sbug53511.php(17): test()
|
||||
#2 {main}
|
||||
thrown in %sbug53511.php on line 4
|
||||
@@ -1,31 +0,0 @@
|
||||
--TEST--
|
||||
Bug #53629 (memory leak inside highlight_string())
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$str = '
|
||||
<?php
|
||||
class foo {
|
||||
public $bar = <<<EOT
|
||||
bar
|
||||
EOT;
|
||||
}
|
||||
?>
|
||||
';
|
||||
$str2 = '
|
||||
<?php
|
||||
var_dump(array(<<<EOD
|
||||
foobar!
|
||||
EOD
|
||||
));
|
||||
?>
|
||||
';
|
||||
|
||||
highlight_string($str, true);
|
||||
highlight_string($str2, true);
|
||||
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
Done
|
||||
@@ -1,10 +0,0 @@
|
||||
--TEST--
|
||||
zend_strtod() hangs with 2.2250738585072011e-308
|
||||
--FILE--
|
||||
<?php
|
||||
$d = 2.2250738585072011e-308;
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Done
|
||||
@@ -1,22 +0,0 @@
|
||||
--TEST--
|
||||
Bug #53727 (Inconsistent behavior of is_subclass_of with interfaces)
|
||||
--FILE--
|
||||
<?php
|
||||
interface MyInterface {
|
||||
const TEST_CONSTANT = true;
|
||||
}
|
||||
|
||||
class ParentClass implements MyInterface { }
|
||||
|
||||
class ChildClass extends ParentClass { }
|
||||
|
||||
echo (is_subclass_of('ChildClass', 'MyInterface') ? 'true' : 'false') . "\n";
|
||||
echo (defined('ChildClass::TEST_CONSTANT') ? 'true' : 'false') . "\n";
|
||||
|
||||
echo (is_subclass_of('ParentClass', 'MyInterface') ? 'true' : 'false') . "\n";
|
||||
echo (defined('ParentClass::TEST_CONSTANT') ? 'true' : 'false') . "\n";
|
||||
--EXPECT--
|
||||
true
|
||||
true
|
||||
true
|
||||
true
|
||||
@@ -1,39 +0,0 @@
|
||||
--TEST--
|
||||
Bug #53748 (Using traits lead to a segmentation fault)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
trait Singleton {
|
||||
protected static $instances=array();
|
||||
abstract protected function __construct($config);
|
||||
public static function getInstance($config) {
|
||||
if (!isset(self::$instances[$serialize = serialize($config)])) {
|
||||
self::$instances[$serialize] = new self($config);
|
||||
}
|
||||
return self::$instances[$serialize];
|
||||
}
|
||||
}
|
||||
|
||||
class MyHelloWorld {
|
||||
use Singleton;
|
||||
public function __construct($config)
|
||||
{
|
||||
var_dump( $config);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$o= myHelloWorld::getInstance(1);
|
||||
$o= myHelloWorld::getInstance(1);
|
||||
$o= myHelloWorld::getInstance(2);
|
||||
$o= myHelloWorld::getInstance(array(1=>2));
|
||||
$o= myHelloWorld::getInstance(array(1=>2));
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
int(1)
|
||||
int(2)
|
||||
array(1) {
|
||||
[1]=>
|
||||
int(2)
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
--TEST--
|
||||
Bug #53958 (Closures can't 'use' shared variables by value and by reference)
|
||||
--FILE--
|
||||
<?php
|
||||
// TEST 1
|
||||
$a = 1;
|
||||
$fn1 = function() use ($a) {echo "$a\n"; $a++;};
|
||||
$fn2 = function() use ($a) {echo "$a\n"; $a++;};
|
||||
$a = 5;
|
||||
$fn1(); // 1
|
||||
$fn2(); // 1
|
||||
$fn1(); // 1
|
||||
$fn2(); // 1
|
||||
|
||||
// TEST 2
|
||||
$b = 1;
|
||||
$fn1 = function() use (&$b) {echo "$b\n"; $b++;};
|
||||
$fn2 = function() use (&$b) {echo "$b\n"; $b++;};
|
||||
$b = 5;
|
||||
$fn1(); // 5
|
||||
$fn2(); // 6
|
||||
$fn1(); // 7
|
||||
$fn2(); // 8
|
||||
|
||||
// TEST 3
|
||||
$c = 1;
|
||||
$fn1 = function() use (&$c) {echo "$c\n"; $c++;};
|
||||
$fn2 = function() use ($c) {echo "$c\n"; $c++;};
|
||||
$c = 5;
|
||||
$fn1(); // 5
|
||||
$fn2(); // 1
|
||||
$fn1(); // 6
|
||||
$fn2(); // 1
|
||||
|
||||
// TEST 4
|
||||
$d = 1;
|
||||
$fn1 = function() use ($d) {echo "$d\n"; $d++;};
|
||||
$fn2 = function() use (&$d) {echo "$d\n"; $d++;};
|
||||
$d = 5;
|
||||
$fn1(); // 1
|
||||
$fn2(); // 5
|
||||
$fn1(); // 1
|
||||
$fn2(); // 6
|
||||
?>
|
||||
--EXPECT--
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
5
|
||||
1
|
||||
6
|
||||
1
|
||||
1
|
||||
5
|
||||
1
|
||||
6
|
||||
@@ -1,11 +0,0 @@
|
||||
--TEST--
|
||||
Bug #53971 (isset() and empty() produce apparently spurious runtime error)
|
||||
--FILE--
|
||||
<?php
|
||||
$s = "";
|
||||
var_dump(isset($s[0][0]));
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(false)
|
||||
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54013 (ReflectionParam for duplicate parameter contains garbage)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class a
|
||||
{
|
||||
function b($aaaaaaaa, $aaaaaaaa)
|
||||
{
|
||||
$params = func_get_args();
|
||||
}
|
||||
}
|
||||
|
||||
$c = new a;
|
||||
$c->b('waa?', 'meukee!');
|
||||
|
||||
$reflectionClass = new ReflectionClass($c);
|
||||
$params = $reflectionClass->getMethod('b')->getParameters();
|
||||
|
||||
var_dump($params[0], $params[1]);
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
object(ReflectionParameter)#%d (1) {
|
||||
["name"]=>
|
||||
string(8) "aaaaaaaa"
|
||||
}
|
||||
object(ReflectionParameter)#%d (1) {
|
||||
["name"]=>
|
||||
string(8) "aaaaaaaa"
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54039 (use() of static variables in lambda functions can break staticness)
|
||||
--FILE--
|
||||
<?php
|
||||
function test_1() {
|
||||
static $v = 0;
|
||||
++$v;
|
||||
echo "Outer function increments \$v to $v\n";
|
||||
$f = function() use($v) {
|
||||
echo "Inner function reckons \$v is $v\n";
|
||||
};
|
||||
return $f;
|
||||
}
|
||||
|
||||
$f = test_1(); $f();
|
||||
$f = test_1(); $f();
|
||||
|
||||
function test_2() {
|
||||
static $v = 0;
|
||||
$f = function() use($v) {
|
||||
echo "Inner function reckons \$v is $v\n";
|
||||
};
|
||||
++$v;
|
||||
echo "Outer function increments \$v to $v\n";
|
||||
return $f;
|
||||
}
|
||||
|
||||
$f = test_2(); $f();
|
||||
$f = test_2(); $f();
|
||||
|
||||
function test_3() {
|
||||
static $v = "";
|
||||
$v .= 'b';
|
||||
echo "Outer function catenates 'b' onto \$v to give $v\n";
|
||||
$f = function() use($v) {
|
||||
echo "Inner function reckons \$v is $v\n";
|
||||
};
|
||||
$v .= 'a';
|
||||
echo "Outer function catenates 'a' onto \$v to give $v\n";
|
||||
return $f;
|
||||
}
|
||||
$f = test_3(); $f();
|
||||
$f = test_3(); $f();
|
||||
--EXPECT--
|
||||
Outer function increments $v to 1
|
||||
Inner function reckons $v is 1
|
||||
Outer function increments $v to 2
|
||||
Inner function reckons $v is 2
|
||||
Outer function increments $v to 1
|
||||
Inner function reckons $v is 0
|
||||
Outer function increments $v to 2
|
||||
Inner function reckons $v is 1
|
||||
Outer function catenates 'b' onto $v to give b
|
||||
Outer function catenates 'a' onto $v to give ba
|
||||
Inner function reckons $v is b
|
||||
Outer function catenates 'b' onto $v to give bab
|
||||
Outer function catenates 'a' onto $v to give baba
|
||||
Inner function reckons $v is bab
|
||||
@@ -1,17 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54262 (Crash when assigning value to a dimension in a non-array)
|
||||
--FILE--
|
||||
<?php
|
||||
$a = '0';
|
||||
var_dump(isset($a['b']));
|
||||
$simpleString = preg_match('//', '', $a->a);
|
||||
$simpleString["wrong"] = "f";
|
||||
echo "ok\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
bool(true)
|
||||
|
||||
Warning: Attempt to modify property of non-object in %s/Zend/tests/bug54262.php on line 4
|
||||
|
||||
Warning: Cannot use a scalar value as an array in %s/Zend/tests/bug54262.php on line 5
|
||||
ok
|
||||
@@ -1,17 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54265 (crash when variable gets reassigned in error handler)
|
||||
--FILE--
|
||||
<?php
|
||||
function my_errorhandler($errno,$errormsg) {
|
||||
global $my_var;
|
||||
$my_var = 0;
|
||||
echo "EROOR: $errormsg\n";
|
||||
}
|
||||
set_error_handler("my_errorhandler");
|
||||
$my_var = str_repeat("A",$my_var[0]->errormsg = "xyz");
|
||||
echo "ok\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
EROOR: Creating default object from empty value
|
||||
ok
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54268 (Double free when destroy_zend_class fails)
|
||||
--INI--
|
||||
memory_limit=8M
|
||||
--SKIPIF--
|
||||
<?php
|
||||
$zend_mm_enabled = getenv("USE_ZEND_ALLOC");
|
||||
if ($zend_mm_enabled === "0") {
|
||||
die("skip Zend MM disabled");
|
||||
}
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
class DestructableObject
|
||||
{
|
||||
public function __destruct()
|
||||
{
|
||||
DestructableObject::__destruct();
|
||||
}
|
||||
}
|
||||
class DestructorCreator
|
||||
{
|
||||
public function __destruct()
|
||||
{
|
||||
$this->test = new DestructableObject;
|
||||
}
|
||||
}
|
||||
class Test
|
||||
{
|
||||
public static $mystatic;
|
||||
}
|
||||
$x = new Test();
|
||||
Test::$mystatic = new DestructorCreator();
|
||||
--EXPECTF--
|
||||
Fatal error: Allowed memory size of %s bytes exhausted%s(tried to allocate %s bytes) in %s on line %d
|
||||
@@ -1,22 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54305 (Crash in gc_remove_zval_from_buffer)
|
||||
--FILE--
|
||||
<?php
|
||||
class TestClass {
|
||||
public function methodWithArgs($a, $b) {
|
||||
}
|
||||
}
|
||||
abstract class AbstractClass {
|
||||
}
|
||||
$methodWithArgs = new ReflectionMethod('TestClass', 'methodWithArgs');
|
||||
echo $methodWithArgs++;
|
||||
?>
|
||||
--EXPECTF--
|
||||
Method [ <user> public method methodWithArgs ] {
|
||||
@@ %sbug54305.php %d - %d
|
||||
|
||||
- Parameters [2] {
|
||||
Parameter #0 [ <required> $a ]
|
||||
Parameter #1 [ <required> $b ]
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54358 (Closure, use and reference)
|
||||
--FILE--
|
||||
<?php
|
||||
class asserter {
|
||||
public function call($function) {
|
||||
}
|
||||
}
|
||||
|
||||
$asserter = new asserter();
|
||||
|
||||
$closure = function() use ($asserter, &$function) {
|
||||
$asserter->call($function = 'md5');
|
||||
};
|
||||
|
||||
$closure();
|
||||
|
||||
var_dump($function);
|
||||
|
||||
$closure = function() use ($asserter, $function) {
|
||||
$asserter->call($function);
|
||||
};
|
||||
|
||||
$closure();
|
||||
|
||||
var_dump($function);
|
||||
|
||||
$closure = function() use ($asserter, $function) {
|
||||
$asserter->call($function);
|
||||
};
|
||||
|
||||
$closure();
|
||||
|
||||
var_dump($function);
|
||||
?>
|
||||
--EXPECT--
|
||||
string(3) "md5"
|
||||
string(3) "md5"
|
||||
string(3) "md5"
|
||||
@@ -1,24 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54367 (Use of closure causes problem in ArrayAccess)
|
||||
--FILE--
|
||||
<?php
|
||||
class MyObjet implements ArrayAccess
|
||||
{
|
||||
public function offsetSet($offset, $value) { }
|
||||
public function offsetExists($offset) { }
|
||||
public function offsetUnset($offset) { }
|
||||
|
||||
public function offsetGet ($offset)
|
||||
{
|
||||
return function ($var) use ($offset) { // here is the problem
|
||||
var_dump($offset, $var);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
$a = new MyObjet();
|
||||
echo $a['p']('foo');
|
||||
?>
|
||||
--EXPECT--
|
||||
string(1) "p"
|
||||
string(3) "foo"
|
||||
@@ -1,23 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54372 (Crash accessing global object itself returned from its __get() handle)
|
||||
--FILE--
|
||||
<?php
|
||||
class test_class
|
||||
{
|
||||
public function __get($name)
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function b()
|
||||
{
|
||||
echo "ok\n";
|
||||
}
|
||||
}
|
||||
|
||||
global $test3;
|
||||
$test3 = new test_class();
|
||||
$test3->a->b();
|
||||
?>
|
||||
--EXPECT--
|
||||
ok
|
||||
@@ -1,15 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54585 (track_errors causes segfault)
|
||||
--INI--
|
||||
track_errors=On
|
||||
--FILE--
|
||||
<?php
|
||||
function testing($source) {
|
||||
unset($source[$cos]);
|
||||
}
|
||||
testing($_GET);
|
||||
echo "ok\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Notice: Undefined variable: cos in %sbug54585.php on line 3
|
||||
ok
|
||||
@@ -1,26 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54624 (class_alias and type hint)
|
||||
--FILE--
|
||||
<?php
|
||||
class A
|
||||
{
|
||||
function foo(A $param) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class_alias('A', 'AliasA');
|
||||
|
||||
eval('
|
||||
class B extends A
|
||||
{
|
||||
function foo(AliasA $param) {
|
||||
}
|
||||
|
||||
}
|
||||
');
|
||||
|
||||
echo "DONE\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
DONE
|
||||
@@ -1,3 +0,0 @@
|
||||
<?php
|
||||
namespace b\c {}
|
||||
namespace b\d {}
|
||||
@@ -1,11 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54804 (__halt_compiler and imported namespaces)
|
||||
--FILE--
|
||||
<?php
|
||||
namespace a;
|
||||
require __DIR__ . '/bug54804.inc';
|
||||
echo 'DONE';
|
||||
__halt_compiler();
|
||||
?>
|
||||
--EXPECT--
|
||||
DONE
|
||||
@@ -1,28 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54910 (Crash when calling call_user_func with unknown function name)
|
||||
--FILE--
|
||||
<?php
|
||||
class A {
|
||||
public function __call($method, $args) {
|
||||
if (stripos($method, 'get') === 0) {
|
||||
return $this->get();
|
||||
}
|
||||
die("No such method - '$method'\n");
|
||||
}
|
||||
|
||||
protected function get() {
|
||||
$class = get_class($this);
|
||||
$call = array($class, 'noSuchMethod');
|
||||
|
||||
if (is_callable($call)) {
|
||||
call_user_func($call);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class B extends A {}
|
||||
|
||||
$input = new B();
|
||||
echo $input->getEmail();
|
||||
--EXPECT--
|
||||
No such method - 'noSuchMethod'
|
||||
@@ -1,23 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55007 (compiler fail after previous fail)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
function __autoload($classname) {
|
||||
if ('CompileErrorClass'==$classname) eval('class CompileErrorClass { function foo() { $a[] } }');
|
||||
if ('MyErrorHandler'==$classname) eval('class MyErrorHandler { function __construct() { print "My error handler runs.\n"; } }');
|
||||
}
|
||||
|
||||
function shutdown() {
|
||||
new MyErrorHandler();
|
||||
}
|
||||
|
||||
|
||||
register_shutdown_function('shutdown');
|
||||
|
||||
new CompileErrorClass();
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Cannot use [] for reading in %s(%d) : eval()'d code on line %d
|
||||
My error handler runs.
|
||||
@@ -1,36 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55086 (Namespace alias does not work inside trait's use block)
|
||||
--FILE--
|
||||
<?php
|
||||
namespace N1 {
|
||||
|
||||
trait T1 {
|
||||
public function hello() { return 'hello from t1'; }
|
||||
}
|
||||
|
||||
trait T2 {
|
||||
public function hello() { return 'hello from t2'; }
|
||||
}
|
||||
|
||||
}
|
||||
namespace N2 {
|
||||
use N1\T1;
|
||||
use N1\T2;
|
||||
class A {
|
||||
use T1, T2 {
|
||||
T1::hello insteadof T2;
|
||||
T1::hello as foo;
|
||||
}
|
||||
}
|
||||
$a = new A;
|
||||
echo $a->hello(), PHP_EOL;
|
||||
echo $a->foo(), PHP_EOL;
|
||||
try {
|
||||
} catch(namespace \Foo $e)
|
||||
{
|
||||
}
|
||||
}
|
||||
?>
|
||||
--EXPECT--
|
||||
hello from t1
|
||||
hello from t1
|
||||
@@ -1,38 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55135 (Array keys are no longer type casted in unset())
|
||||
--FILE--
|
||||
<?php
|
||||
// This fails.
|
||||
$array = array(1 => 2);
|
||||
$a = "1";
|
||||
unset($array[$a]);
|
||||
print_r($array);
|
||||
|
||||
// Those works.
|
||||
$array = array(1 => 2);
|
||||
$a = 1;
|
||||
unset($array[$a]);
|
||||
print_r($array);
|
||||
|
||||
$array = array(1 => 2);
|
||||
unset($array[1]);
|
||||
print_r($array);
|
||||
|
||||
$array = array(1 => 2);
|
||||
$a = 1;
|
||||
unset($array["1"]);
|
||||
print_r($array);
|
||||
?>
|
||||
--EXPECT--
|
||||
Array
|
||||
(
|
||||
)
|
||||
Array
|
||||
(
|
||||
)
|
||||
Array
|
||||
(
|
||||
)
|
||||
Array
|
||||
(
|
||||
)
|
||||
@@ -1,26 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55137 (Changing trait static method visibility)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
trait A {
|
||||
protected static function foo() { echo "abc\n"; }
|
||||
private static function bar() { echo "def\n"; }
|
||||
}
|
||||
|
||||
|
||||
class B {
|
||||
use A {
|
||||
A::foo as public;
|
||||
A::bar as public baz;
|
||||
}
|
||||
}
|
||||
|
||||
B::foo();
|
||||
B::baz();
|
||||
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
abc
|
||||
def
|
||||
@@ -1,30 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55156 (ReflectionClass::getDocComment() returns comment even though the class has none)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
/** test */
|
||||
namespace foo {
|
||||
function test() { }
|
||||
|
||||
$x = new \ReflectionFunction('foo\test');
|
||||
var_dump($x->getDocComment());
|
||||
|
||||
/** test1 */
|
||||
class bar { }
|
||||
|
||||
/** test2 */
|
||||
class foo extends namespace\bar { }
|
||||
|
||||
$x = new \ReflectionClass('foo\bar');
|
||||
var_dump($x->getDocComment());
|
||||
|
||||
$x = new \ReflectionClass('foo\foo');
|
||||
var_dump($x->getDocComment());
|
||||
}
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
bool(false)
|
||||
string(12) "/** test1 */"
|
||||
string(12) "/** test2 */"
|
||||
@@ -1,33 +0,0 @@
|
||||
--TEST--
|
||||
Request #55247 (Parser problem with static calls using string method name)
|
||||
--FILE--
|
||||
<?php
|
||||
class Test{
|
||||
public static function __callStatic($method, $arguments)
|
||||
{
|
||||
echo $method . PHP_EOL;
|
||||
}
|
||||
public function __call($method, $arguments)
|
||||
{
|
||||
echo $method . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
$method = 'method';
|
||||
|
||||
$test = new Test();
|
||||
|
||||
$test->method();
|
||||
$test->$method();
|
||||
$test->{'method'}();
|
||||
|
||||
Test::method();
|
||||
Test::$method();
|
||||
Test::{'method'}();
|
||||
--EXPECT--
|
||||
method
|
||||
method
|
||||
method
|
||||
method
|
||||
method
|
||||
method
|
||||
@@ -1,16 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55305 (ref lost: 1st ref instantiated in class def, 2nd ref made w/o instantiating)
|
||||
--FILE--
|
||||
<?php
|
||||
class Foo {
|
||||
var $foo = "test";
|
||||
}
|
||||
|
||||
$f = new Foo();
|
||||
$f->bar =& $f->foo;
|
||||
var_dump($f->foo);
|
||||
var_dump($f->bar);
|
||||
?>
|
||||
--EXPECT--
|
||||
string(4) "test"
|
||||
string(4) "test"
|
||||
@@ -1,5 +1,5 @@
|
||||
--TEST--
|
||||
Checking if exists interface, trait, abstract and final class
|
||||
Checking if exists interface, abstract and final class
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
@@ -9,16 +9,12 @@ abstract class b { }
|
||||
|
||||
final class c { }
|
||||
|
||||
trait d {}
|
||||
|
||||
var_dump(class_exists('a'));
|
||||
var_dump(class_exists('b'));
|
||||
var_dump(class_exists('c'));
|
||||
var_dump(class_exists('d'));
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(false)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(false)
|
||||
@@ -1,74 +0,0 @@
|
||||
--TEST--
|
||||
Closure 005: Lambda inside class, lifetime of $this
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class A {
|
||||
private $x;
|
||||
|
||||
function __construct($x) {
|
||||
$this->x = $x;
|
||||
}
|
||||
|
||||
function __destruct() {
|
||||
echo "Destroyed\n";
|
||||
}
|
||||
|
||||
function getIncer($val) {
|
||||
return function() use ($val) {
|
||||
$this->x += $val;
|
||||
};
|
||||
}
|
||||
|
||||
function getPrinter() {
|
||||
return function() {
|
||||
echo $this->x."\n";
|
||||
};
|
||||
}
|
||||
|
||||
function getError() {
|
||||
return static function() {
|
||||
echo $this->x."\n";
|
||||
};
|
||||
}
|
||||
|
||||
function printX() {
|
||||
echo $this->x."\n";
|
||||
}
|
||||
}
|
||||
|
||||
$a = new A(3);
|
||||
$incer = $a->getIncer(2);
|
||||
$printer = $a->getPrinter();
|
||||
$error = $a->getError();
|
||||
|
||||
$a->printX();
|
||||
$printer();
|
||||
$incer();
|
||||
$a->printX();
|
||||
$printer();
|
||||
|
||||
unset($a);
|
||||
|
||||
$incer();
|
||||
$printer();
|
||||
|
||||
unset($incer);
|
||||
$printer();
|
||||
|
||||
unset($printer);
|
||||
|
||||
$error();
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
3
|
||||
3
|
||||
5
|
||||
5
|
||||
7
|
||||
7
|
||||
Destroyed
|
||||
|
||||
Fatal error: Using $this when not in object context in %sclosure_005.php on line 28
|
||||
@@ -1,38 +0,0 @@
|
||||
--TEST--
|
||||
Closure 007: Nested lambdas in classes
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class A {
|
||||
private $x = 0;
|
||||
|
||||
function getClosureGetter () {
|
||||
return function () {
|
||||
return function () {
|
||||
$this->x++;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function printX () {
|
||||
echo $this->x."\n";
|
||||
}
|
||||
}
|
||||
|
||||
$a = new A;
|
||||
$a->printX();
|
||||
$getClosure = $a->getClosureGetter();
|
||||
$a->printX();
|
||||
$closure = $getClosure();
|
||||
$a->printX();
|
||||
$closure();
|
||||
$a->printX();
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
0
|
||||
0
|
||||
0
|
||||
1
|
||||
Done
|
||||
@@ -23,18 +23,16 @@ var_dump($y()->test);
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
object(foo)#%d (2) {
|
||||
object(foo)#%d (%d) {
|
||||
["test":"foo":private]=>
|
||||
int(3)
|
||||
["a"]=>
|
||||
object(Closure)#%d (2) {
|
||||
object(Closure)#%d (1) {
|
||||
["static"]=>
|
||||
array(1) {
|
||||
["a"]=>
|
||||
*RECURSION*
|
||||
}
|
||||
["this"]=>
|
||||
*RECURSION*
|
||||
}
|
||||
}
|
||||
bool(true)
|
||||
|
||||
@@ -1,26 +1,16 @@
|
||||
--TEST--
|
||||
Closure 024: Clone the Closure object
|
||||
Closure 024: Trying to clone the Closure object
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$a = 1;
|
||||
$c = function($add) use(&$a) { return $a+$add; };
|
||||
$a = function () {
|
||||
return clone function () {
|
||||
return 1;
|
||||
};
|
||||
};
|
||||
|
||||
$cc = clone $c;
|
||||
$a();
|
||||
|
||||
echo $c(10)."\n";
|
||||
echo $cc(10)."\n";
|
||||
|
||||
$a++;
|
||||
|
||||
echo $c(10)."\n";
|
||||
echo $cc(10)."\n";
|
||||
|
||||
echo "Done.\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
11
|
||||
11
|
||||
12
|
||||
12
|
||||
Done.
|
||||
Fatal error: Trying to clone an uncloneable object of class Closure in %s on line %d
|
||||
@@ -32,9 +32,7 @@ object(foo)#%d (1) {
|
||||
["a"]=>
|
||||
array(1) {
|
||||
[0]=>
|
||||
object(Closure)#%d (1) {
|
||||
["this"]=>
|
||||
*RECURSION*
|
||||
object(Closure)#%d (0) {
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -43,12 +41,7 @@ int(1)
|
||||
string(1) "a"
|
||||
array(1) {
|
||||
[0]=>
|
||||
object(Closure)#%d (1) {
|
||||
["this"]=>
|
||||
object(foo)#%d (1) {
|
||||
["a"]=>
|
||||
*RECURSION*
|
||||
}
|
||||
object(Closure)#%d (0) {
|
||||
}
|
||||
}
|
||||
int(1)
|
||||
@@ -1,33 +0,0 @@
|
||||
--TEST--
|
||||
Closure 036: Rebinding closures
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class A {
|
||||
private $x;
|
||||
|
||||
public function __construct($v) {
|
||||
$this->x = $v;
|
||||
}
|
||||
|
||||
public function getIncrementor() {
|
||||
return function() { return ++$this->x; };
|
||||
}
|
||||
}
|
||||
|
||||
$a = new A(0);
|
||||
$b = new A(10);
|
||||
|
||||
$ca = $a->getIncrementor();
|
||||
$cb = $ca->bindTo($b);
|
||||
$cb2 = Closure::bind($b, $ca);
|
||||
|
||||
var_dump($ca());
|
||||
var_dump($cb());
|
||||
var_dump($cb2());
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
int(1)
|
||||
int(11)
|
||||
int(12)
|
||||
@@ -1,47 +0,0 @@
|
||||
--TEST--
|
||||
Closure 037: self:: and static:: within closures
|
||||
--FILE--
|
||||
<?php
|
||||
class A {
|
||||
private $x = 0;
|
||||
|
||||
function getClosure () {
|
||||
return function () {
|
||||
$this->x++;
|
||||
self::printX();
|
||||
self::print42();
|
||||
static::print42();
|
||||
};
|
||||
}
|
||||
|
||||
function printX () {
|
||||
echo $this->x."\n";
|
||||
}
|
||||
|
||||
function print42() {
|
||||
echo "42\n";
|
||||
}
|
||||
}
|
||||
|
||||
class B extends A {
|
||||
function print42() {
|
||||
echo "forty two\n";
|
||||
}
|
||||
}
|
||||
|
||||
$a = new A;
|
||||
$closure = $a->getClosure();
|
||||
$closure();
|
||||
$b = new B;
|
||||
$closure = $b->getClosure();
|
||||
$closure();
|
||||
?>
|
||||
Done.
|
||||
--EXPECTF--
|
||||
1
|
||||
42
|
||||
42
|
||||
1
|
||||
42
|
||||
forty two
|
||||
Done.
|
||||
@@ -1,5 +1,5 @@
|
||||
--TEST--
|
||||
concat different types
|
||||
concat difffent types
|
||||
--INI--
|
||||
precision=14
|
||||
--FILE--
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
--TEST--
|
||||
Persistent case insensitive and user defined constants
|
||||
Persistent case insensetive and user defined constants
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump(ZEND_THREAD_safe);
|
||||
@@ -7,6 +7,5 @@ define("ZEND_THREAD_safe", 123);
|
||||
var_dump(ZEND_THREAD_safe);
|
||||
?>
|
||||
--EXPECTF--
|
||||
Notice: Use of undefined constant ZEND_THREAD_safe - assumed 'ZEND_THREAD_safe' in %s on line %d
|
||||
string(16) "ZEND_THREAD_safe"
|
||||
bool(%s)
|
||||
int(123)
|
||||
@@ -1,133 +0,0 @@
|
||||
--TEST--
|
||||
debug_backtrace limit
|
||||
--FILE--
|
||||
<?php
|
||||
function a() {
|
||||
b();
|
||||
}
|
||||
|
||||
function b() {
|
||||
c();
|
||||
}
|
||||
|
||||
function c() {
|
||||
print_r(debug_backtrace(0, 1));
|
||||
print_r(debug_backtrace(0, 2));
|
||||
print_r(debug_backtrace(0, 0));
|
||||
print_r(debug_backtrace(0, 4));
|
||||
}
|
||||
|
||||
a();
|
||||
?>
|
||||
--EXPECTF--
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %s/debug_backtrace_limit.php
|
||||
[line] => 7
|
||||
[function] => c
|
||||
[args] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %s/debug_backtrace_limit.php
|
||||
[line] => 7
|
||||
[function] => c
|
||||
[args] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %s/debug_backtrace_limit.php
|
||||
[line] => 3
|
||||
[function] => b
|
||||
[args] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %s/debug_backtrace_limit.php
|
||||
[line] => 7
|
||||
[function] => c
|
||||
[args] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %s/debug_backtrace_limit.php
|
||||
[line] => 3
|
||||
[function] => b
|
||||
[args] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %s/debug_backtrace_limit.php
|
||||
[line] => 17
|
||||
[function] => a
|
||||
[args] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %s/debug_backtrace_limit.php
|
||||
[line] => 7
|
||||
[function] => c
|
||||
[args] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %s/debug_backtrace_limit.php
|
||||
[line] => 3
|
||||
[function] => b
|
||||
[args] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %s/debug_backtrace_limit.php
|
||||
[line] => 17
|
||||
[function] => a
|
||||
[args] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
@@ -1,397 +0,0 @@
|
||||
--TEST--
|
||||
debug_backtrace options
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
function backtrace_print($opt = null)
|
||||
{
|
||||
if(is_null($opt)) {
|
||||
print_r(debug_backtrace());
|
||||
} else {
|
||||
print_r(debug_backtrace($opt));
|
||||
}
|
||||
}
|
||||
|
||||
function doit($a, $b, $how)
|
||||
{
|
||||
echo "==default\n";
|
||||
$how();
|
||||
echo "==true\n";
|
||||
$how(true);
|
||||
echo "==false\n";
|
||||
$how(false);
|
||||
echo "==DEBUG_BACKTRACE_PROVIDE_OBJECT\n";
|
||||
$how(DEBUG_BACKTRACE_PROVIDE_OBJECT);
|
||||
echo "==DEBUG_BACKTRACE_IGNORE_ARGS\n";
|
||||
$how(DEBUG_BACKTRACE_IGNORE_ARGS);
|
||||
echo "==both\n";
|
||||
$how(DEBUG_BACKTRACE_PROVIDE_OBJECT|DEBUG_BACKTRACE_IGNORE_ARGS);
|
||||
}
|
||||
|
||||
class foo {
|
||||
protected function doCall($dowhat, $how)
|
||||
{
|
||||
$dowhat('a','b', $how);
|
||||
}
|
||||
static function statCall($dowhat, $how)
|
||||
{
|
||||
$obj = new self();
|
||||
$obj->doCall($dowhat, $how);
|
||||
}
|
||||
}
|
||||
foo::statCall("doit", "debug_print_backtrace");
|
||||
foo::statCall("doit", "backtrace_print");
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
==default
|
||||
#0 doit(a, b, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#1 foo->doCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#2 foo::statCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
==true
|
||||
#0 doit(a, b, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#1 foo->doCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#2 foo::statCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
==false
|
||||
#0 doit(a, b, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#1 foo->doCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#2 foo::statCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
==DEBUG_BACKTRACE_PROVIDE_OBJECT
|
||||
#0 doit(a, b, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#1 foo->doCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#2 foo::statCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
==DEBUG_BACKTRACE_IGNORE_ARGS
|
||||
#0 doit() called at [%sdebug_backtrace_options.php:%d]
|
||||
#1 foo->doCall() called at [%sdebug_backtrace_options.php:%d]
|
||||
#2 foo::statCall() called at [%sdebug_backtrace_options.php:%d]
|
||||
==both
|
||||
#0 doit() called at [%sdebug_backtrace_options.php:%d]
|
||||
#1 foo->doCall() called at [%sdebug_backtrace_options.php:%d]
|
||||
#2 foo::statCall() called at [%sdebug_backtrace_options.php:%d]
|
||||
==default
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => backtrace_print
|
||||
[args] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doit
|
||||
[args] => Array
|
||||
(
|
||||
[0] => a
|
||||
[1] => b
|
||||
[2] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doCall
|
||||
[class] => foo
|
||||
[object] => foo Object
|
||||
(
|
||||
)
|
||||
|
||||
[type] => ->
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[3] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => statCall
|
||||
[class] => foo
|
||||
[type] => ::
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
==true
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => 17
|
||||
[function] => backtrace_print
|
||||
[args] => Array
|
||||
(
|
||||
[0] => 1
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doit
|
||||
[args] => Array
|
||||
(
|
||||
[0] => a
|
||||
[1] => b
|
||||
[2] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doCall
|
||||
[class] => foo
|
||||
[object] => foo Object
|
||||
(
|
||||
)
|
||||
|
||||
[type] => ->
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[3] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => statCall
|
||||
[class] => foo
|
||||
[type] => ::
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
==false
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => 19
|
||||
[function] => backtrace_print
|
||||
[args] => Array
|
||||
(
|
||||
[0] =>
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doit
|
||||
[args] => Array
|
||||
(
|
||||
[0] => a
|
||||
[1] => b
|
||||
[2] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doCall
|
||||
[class] => foo
|
||||
[type] => ->
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[3] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => statCall
|
||||
[class] => foo
|
||||
[type] => ::
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
==DEBUG_BACKTRACE_PROVIDE_OBJECT
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => 21
|
||||
[function] => backtrace_print
|
||||
[args] => Array
|
||||
(
|
||||
[0] => 1
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doit
|
||||
[args] => Array
|
||||
(
|
||||
[0] => a
|
||||
[1] => b
|
||||
[2] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doCall
|
||||
[class] => foo
|
||||
[object] => foo Object
|
||||
(
|
||||
)
|
||||
|
||||
[type] => ->
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[3] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => statCall
|
||||
[class] => foo
|
||||
[type] => ::
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
==DEBUG_BACKTRACE_IGNORE_ARGS
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => 23
|
||||
[function] => backtrace_print
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doit
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doCall
|
||||
[class] => foo
|
||||
[type] => ->
|
||||
)
|
||||
|
||||
[3] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => statCall
|
||||
[class] => foo
|
||||
[type] => ::
|
||||
)
|
||||
|
||||
)
|
||||
==both
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => 25
|
||||
[function] => backtrace_print
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doit
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doCall
|
||||
[class] => foo
|
||||
[object] => foo Object
|
||||
(
|
||||
)
|
||||
|
||||
[type] => ->
|
||||
)
|
||||
|
||||
[3] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => statCall
|
||||
[class] => foo
|
||||
[type] => ::
|
||||
)
|
||||
|
||||
)
|
||||
@@ -1,31 +0,0 @@
|
||||
--TEST--
|
||||
debug_print_backtrace limit
|
||||
--FILE--
|
||||
<?php
|
||||
function a() {
|
||||
b();
|
||||
}
|
||||
|
||||
function b() {
|
||||
c();
|
||||
}
|
||||
|
||||
function c() {
|
||||
debug_print_backtrace(0, 1);
|
||||
debug_print_backtrace(0, 2);
|
||||
debug_print_backtrace(0, 0);
|
||||
debug_print_backtrace(0, 4);
|
||||
}
|
||||
|
||||
a();
|
||||
?>
|
||||
--EXPECTF--
|
||||
#0 c() called at [%s/debug_print_backtrace_limit.php:7]
|
||||
#0 c() called at [%s/debug_print_backtrace_limit.php:7]
|
||||
#1 b() called at [%s/debug_print_backtrace_limit.php:3]
|
||||
#0 c() called at [%s/debug_print_backtrace_limit.php:7]
|
||||
#1 b() called at [%s/debug_print_backtrace_limit.php:3]
|
||||
#2 a() called at [%s/debug_print_backtrace_limit.php:17]
|
||||
#0 c() called at [%s/debug_print_backtrace_limit.php:7]
|
||||
#1 b() called at [%s/debug_print_backtrace_limit.php:3]
|
||||
#2 a() called at [%s/debug_print_backtrace_limit.php:17]
|
||||
@@ -2,29 +2,21 @@
|
||||
Testing declare statement with several type values
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded("mbstring")) {
|
||||
die("skip Requires ext/mbstring");
|
||||
if (in_array("detect_unicode", array_keys(ini_get_all()))) {
|
||||
die("skip");
|
||||
}
|
||||
?>
|
||||
--INI--
|
||||
zend.multibyte=1
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
declare(encoding = 1);
|
||||
declare(encoding = 112313123213131232100);
|
||||
declare(encoding = 1123131232131312321);
|
||||
declare(encoding = NULL);
|
||||
declare(encoding = 'utf-8');
|
||||
declare(encoding = M_PI);
|
||||
declare(encoding = 'utf-8');
|
||||
|
||||
print 'DONE';
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: Unsupported encoding [1] in %sdeclare_001.php on line %d
|
||||
|
||||
Warning: Unsupported encoding [1.1231312321313E+20] in %sdeclare_001.php on line %d
|
||||
|
||||
Warning: Unsupported encoding [] in %sdeclare_001.php on line %d
|
||||
|
||||
Fatal error: Cannot use constants as encoding in %sdeclare_001.php on line %d
|
||||
--EXPECT--
|
||||
DONE
|
||||
@@ -1,31 +0,0 @@
|
||||
--TEST--
|
||||
Testing declare statement with several type values
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!ini_get("zend.multibyte")) {
|
||||
die("skip Requires zend.multibyte=1");
|
||||
}
|
||||
if (!extension_loaded("mbstring")) {
|
||||
die("skip Requires ext/mbstring");
|
||||
}
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
declare(encoding = 1);
|
||||
declare(encoding = 1123131232131312321);
|
||||
declare(encoding = NULL);
|
||||
declare(encoding = 'utf-8');
|
||||
declare(encoding = M_PI);
|
||||
|
||||
print 'DONE';
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: Unsupported encoding [%d] in %sdeclare_002.php on line 3
|
||||
|
||||
Warning: Unsupported encoding [%f] in %sdeclare_002.php on line 4
|
||||
|
||||
Warning: Unsupported encoding [] in %sdeclare_002.php on line 5
|
||||
|
||||
Fatal error: Cannot use constants as encoding in %sdeclare_002.php on line 7
|
||||
@@ -1,24 +0,0 @@
|
||||
--TEST--
|
||||
Testing declare statement with several type values
|
||||
--INI--
|
||||
precision=15
|
||||
zend.multibyte=1
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
declare(encoding = 1);
|
||||
declare(encoding = 11111111111111);
|
||||
declare(encoding = NULL);
|
||||
declare(encoding = M_PI);
|
||||
|
||||
print 'DONE';
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: Unsupported encoding [1] in %sdeclare_003.php on line %d
|
||||
|
||||
Warning: Unsupported encoding [11111111111111] in %sdeclare_003.php on line %d
|
||||
|
||||
Warning: Unsupported encoding [] in %sdeclare_003.php on line %d
|
||||
|
||||
Fatal error: Cannot use constants as encoding in %sdeclare_003.php on line %d
|
||||
@@ -1,27 +0,0 @@
|
||||
--TEST--
|
||||
Testing declare statement with several type values
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!ini_get("zend.multibyte")) {
|
||||
die("skip Requires zend.multibyte=1");
|
||||
}
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
declare(encoding = 1);
|
||||
declare(encoding = 1123131232131312321);
|
||||
declare(encoding = NULL);
|
||||
declare(encoding = M_PI);
|
||||
|
||||
print 'DONE';
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: Unsupported encoding [%d] in %sdeclare_004.php on line 3
|
||||
|
||||
Warning: Unsupported encoding [%f] in %sdeclare_004.php on line 4
|
||||
|
||||
Warning: Unsupported encoding [] in %sdeclare_004.php on line 5
|
||||
|
||||
Fatal error: Cannot use constants as encoding in %sdeclare_004.php on line 6
|
||||
Loaded 100 of 2609 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user