1--TEST--
2Test fputcsv() : usage variations - with different delimiter and same enclosure
3--FILE--
4<?php
5
6/*
7   Testing fputcsv() to write to a file when enclosure is same but delimiter is different from those
8   present in the field to be written to the file
9 */
10
11echo "*** Testing fputcsv() : with different delimiter and same enclosure ***\n";
12
13/* the array is with three elements in it. Each element should be read as
14   1st element is delimiter, 2nd element is enclosure
15   and 3rd element is csv fields
16*/
17$csv_lists = array (
18  array(',', '"', array('water','fruit') ),
19  array(',', '"', array('"water","fruit') ),
20  array(',', '"', array('"water","fruit"') ),
21  array(' ', '^', array('^water^ ^fruit^')),
22  array(':', '&', array('&water&:&fruit&')),
23  array('=', '=', array('=water===fruit=')),
24  array('-', '-', array('-water--fruit-air')),
25  array('-', '-', array('-water---fruit---air-')),
26  array(':', '&', array('&""""&:&"&:,:":&,&:,,,,'))
27
28);
29$file_path = __DIR__;
30$file = "$file_path/fputcsv_variation7.tmp";
31
32$file_modes = array ("r+", "r+b", "r+t",
33                     "a+", "a+b", "a+t",
34                     "w+", "w+b", "w+t",
35                     "x+", "x+b", "x+t");
36
37$loop_counter = 1;
38foreach ($csv_lists as $csv_list) {
39  for($mode_counter = 0; $mode_counter < count($file_modes); $mode_counter++) {
40
41    echo "\n-- file opened in $file_modes[$mode_counter] --\n";
42    // create the file and add the content with has csv fields
43    if ( strstr($file_modes[$mode_counter], "r") ) {
44      $fo = new SplFileObject($file, 'w');
45    } else {
46      $fo = new SplFileObject($file, $file_modes[$mode_counter]);
47    }
48    $fo->setCsvControl(escape: '\\');
49
50    $delimiter = $csv_list[0];
51    $enclosure = $csv_list[1];
52    $csv_field = $csv_list[2];
53
54    // write to a file in csv format
55    var_dump( $fo->fputcsv($csv_field, '+', $enclosure) );
56    // check the file pointer position and eof
57    var_dump( $fo->ftell() );
58    var_dump( $fo->eof() );
59    //close the file
60    unset($fo);
61
62    // print the file contents
63    var_dump( file_get_contents($file) );
64
65    //delete file
66    unlink($file);
67  } //end of mode loop
68} // end of foreach
69
70echo "Done\n";
71?>
72--EXPECTF--
73*** Testing fputcsv() : with different delimiter and same enclosure ***
74
75-- file opened in r+ --
76int(12)
77int(12)
78bool(false)
79string(12) "water+fruit
80"
81
82-- file opened in r+b --
83int(12)
84int(12)
85bool(false)
86string(12) "water+fruit
87"
88
89-- file opened in r+t --
90int(12)
91int(12)
92bool(false)
93string(%d) "water+fruit
94"
95
96-- file opened in a+ --
97int(12)
98int(12)
99bool(false)
100string(12) "water+fruit
101"
102
103-- file opened in a+b --
104int(12)
105int(12)
106bool(false)
107string(12) "water+fruit
108"
109
110-- file opened in a+t --
111int(12)
112int(12)
113bool(false)
114string(%d) "water+fruit
115"
116
117-- file opened in w+ --
118int(12)
119int(12)
120bool(false)
121string(12) "water+fruit
122"
123
124-- file opened in w+b --
125int(12)
126int(12)
127bool(false)
128string(12) "water+fruit
129"
130
131-- file opened in w+t --
132int(12)
133int(12)
134bool(false)
135string(%d) "water+fruit
136"
137
138-- file opened in x+ --
139int(12)
140int(12)
141bool(false)
142string(12) "water+fruit
143"
144
145-- file opened in x+b --
146int(12)
147int(12)
148bool(false)
149string(12) "water+fruit
150"
151
152-- file opened in x+t --
153int(12)
154int(12)
155bool(false)
156string(%d) "water+fruit
157"
158
159-- file opened in r+ --
160int(20)
161int(20)
162bool(false)
163string(20) """"water"",""fruit"
164"
165
166-- file opened in r+b --
167int(20)
168int(20)
169bool(false)
170string(20) """"water"",""fruit"
171"
172
173-- file opened in r+t --
174int(20)
175int(20)
176bool(false)
177string(%d) """"water"",""fruit"
178"
179
180-- file opened in a+ --
181int(20)
182int(20)
183bool(false)
184string(20) """"water"",""fruit"
185"
186
187-- file opened in a+b --
188int(20)
189int(20)
190bool(false)
191string(20) """"water"",""fruit"
192"
193
194-- file opened in a+t --
195int(20)
196int(20)
197bool(false)
198string(%d) """"water"",""fruit"
199"
200
201-- file opened in w+ --
202int(20)
203int(20)
204bool(false)
205string(20) """"water"",""fruit"
206"
207
208-- file opened in w+b --
209int(20)
210int(20)
211bool(false)
212string(20) """"water"",""fruit"
213"
214
215-- file opened in w+t --
216int(20)
217int(20)
218bool(false)
219string(%d) """"water"",""fruit"
220"
221
222-- file opened in x+ --
223int(20)
224int(20)
225bool(false)
226string(20) """"water"",""fruit"
227"
228
229-- file opened in x+b --
230int(20)
231int(20)
232bool(false)
233string(20) """"water"",""fruit"
234"
235
236-- file opened in x+t --
237int(20)
238int(20)
239bool(false)
240string(%d) """"water"",""fruit"
241"
242
243-- file opened in r+ --
244int(22)
245int(22)
246bool(false)
247string(22) """"water"",""fruit"""
248"
249
250-- file opened in r+b --
251int(22)
252int(22)
253bool(false)
254string(22) """"water"",""fruit"""
255"
256
257-- file opened in r+t --
258int(22)
259int(22)
260bool(false)
261string(%d) """"water"",""fruit"""
262"
263
264-- file opened in a+ --
265int(22)
266int(22)
267bool(false)
268string(22) """"water"",""fruit"""
269"
270
271-- file opened in a+b --
272int(22)
273int(22)
274bool(false)
275string(22) """"water"",""fruit"""
276"
277
278-- file opened in a+t --
279int(22)
280int(22)
281bool(false)
282string(%d) """"water"",""fruit"""
283"
284
285-- file opened in w+ --
286int(22)
287int(22)
288bool(false)
289string(22) """"water"",""fruit"""
290"
291
292-- file opened in w+b --
293int(22)
294int(22)
295bool(false)
296string(22) """"water"",""fruit"""
297"
298
299-- file opened in w+t --
300int(22)
301int(22)
302bool(false)
303string(%d) """"water"",""fruit"""
304"
305
306-- file opened in x+ --
307int(22)
308int(22)
309bool(false)
310string(22) """"water"",""fruit"""
311"
312
313-- file opened in x+b --
314int(22)
315int(22)
316bool(false)
317string(22) """"water"",""fruit"""
318"
319
320-- file opened in x+t --
321int(22)
322int(22)
323bool(false)
324string(%d) """"water"",""fruit"""
325"
326
327-- file opened in r+ --
328int(22)
329int(22)
330bool(false)
331string(22) "^^^water^^ ^^fruit^^^
332"
333
334-- file opened in r+b --
335int(22)
336int(22)
337bool(false)
338string(22) "^^^water^^ ^^fruit^^^
339"
340
341-- file opened in r+t --
342int(22)
343int(22)
344bool(false)
345string(%d) "^^^water^^ ^^fruit^^^
346"
347
348-- file opened in a+ --
349int(22)
350int(22)
351bool(false)
352string(22) "^^^water^^ ^^fruit^^^
353"
354
355-- file opened in a+b --
356int(22)
357int(22)
358bool(false)
359string(22) "^^^water^^ ^^fruit^^^
360"
361
362-- file opened in a+t --
363int(22)
364int(22)
365bool(false)
366string(%d) "^^^water^^ ^^fruit^^^
367"
368
369-- file opened in w+ --
370int(22)
371int(22)
372bool(false)
373string(22) "^^^water^^ ^^fruit^^^
374"
375
376-- file opened in w+b --
377int(22)
378int(22)
379bool(false)
380string(22) "^^^water^^ ^^fruit^^^
381"
382
383-- file opened in w+t --
384int(22)
385int(22)
386bool(false)
387string(%d) "^^^water^^ ^^fruit^^^
388"
389
390-- file opened in x+ --
391int(22)
392int(22)
393bool(false)
394string(22) "^^^water^^ ^^fruit^^^
395"
396
397-- file opened in x+b --
398int(22)
399int(22)
400bool(false)
401string(22) "^^^water^^ ^^fruit^^^
402"
403
404-- file opened in x+t --
405int(22)
406int(22)
407bool(false)
408string(%d) "^^^water^^ ^^fruit^^^
409"
410
411-- file opened in r+ --
412int(22)
413int(22)
414bool(false)
415string(22) "&&&water&&:&&fruit&&&
416"
417
418-- file opened in r+b --
419int(22)
420int(22)
421bool(false)
422string(22) "&&&water&&:&&fruit&&&
423"
424
425-- file opened in r+t --
426int(22)
427int(22)
428bool(false)
429string(%d) "&&&water&&:&&fruit&&&
430"
431
432-- file opened in a+ --
433int(22)
434int(22)
435bool(false)
436string(22) "&&&water&&:&&fruit&&&
437"
438
439-- file opened in a+b --
440int(22)
441int(22)
442bool(false)
443string(22) "&&&water&&:&&fruit&&&
444"
445
446-- file opened in a+t --
447int(22)
448int(22)
449bool(false)
450string(%d) "&&&water&&:&&fruit&&&
451"
452
453-- file opened in w+ --
454int(22)
455int(22)
456bool(false)
457string(22) "&&&water&&:&&fruit&&&
458"
459
460-- file opened in w+b --
461int(22)
462int(22)
463bool(false)
464string(22) "&&&water&&:&&fruit&&&
465"
466
467-- file opened in w+t --
468int(22)
469int(22)
470bool(false)
471string(%d) "&&&water&&:&&fruit&&&
472"
473
474-- file opened in x+ --
475int(22)
476int(22)
477bool(false)
478string(22) "&&&water&&:&&fruit&&&
479"
480
481-- file opened in x+b --
482int(22)
483int(22)
484bool(false)
485string(22) "&&&water&&:&&fruit&&&
486"
487
488-- file opened in x+t --
489int(22)
490int(22)
491bool(false)
492string(%d) "&&&water&&:&&fruit&&&
493"
494
495-- file opened in r+ --
496int(23)
497int(23)
498bool(false)
499string(23) "===water======fruit===
500"
501
502-- file opened in r+b --
503int(23)
504int(23)
505bool(false)
506string(23) "===water======fruit===
507"
508
509-- file opened in r+t --
510int(23)
511int(23)
512bool(false)
513string(%d) "===water======fruit===
514"
515
516-- file opened in a+ --
517int(23)
518int(23)
519bool(false)
520string(23) "===water======fruit===
521"
522
523-- file opened in a+b --
524int(23)
525int(23)
526bool(false)
527string(23) "===water======fruit===
528"
529
530-- file opened in a+t --
531int(23)
532int(23)
533bool(false)
534string(%d) "===water======fruit===
535"
536
537-- file opened in w+ --
538int(23)
539int(23)
540bool(false)
541string(23) "===water======fruit===
542"
543
544-- file opened in w+b --
545int(23)
546int(23)
547bool(false)
548string(23) "===water======fruit===
549"
550
551-- file opened in w+t --
552int(23)
553int(23)
554bool(false)
555string(%d) "===water======fruit===
556"
557
558-- file opened in x+ --
559int(23)
560int(23)
561bool(false)
562string(23) "===water======fruit===
563"
564
565-- file opened in x+b --
566int(23)
567int(23)
568bool(false)
569string(23) "===water======fruit===
570"
571
572-- file opened in x+t --
573int(23)
574int(23)
575bool(false)
576string(%d) "===water======fruit===
577"
578
579-- file opened in r+ --
580int(24)
581int(24)
582bool(false)
583string(24) "---water----fruit--air-
584"
585
586-- file opened in r+b --
587int(24)
588int(24)
589bool(false)
590string(24) "---water----fruit--air-
591"
592
593-- file opened in r+t --
594int(24)
595int(24)
596bool(false)
597string(%d) "---water----fruit--air-
598"
599
600-- file opened in a+ --
601int(24)
602int(24)
603bool(false)
604string(24) "---water----fruit--air-
605"
606
607-- file opened in a+b --
608int(24)
609int(24)
610bool(false)
611string(24) "---water----fruit--air-
612"
613
614-- file opened in a+t --
615int(24)
616int(24)
617bool(false)
618string(%d) "---water----fruit--air-
619"
620
621-- file opened in w+ --
622int(24)
623int(24)
624bool(false)
625string(24) "---water----fruit--air-
626"
627
628-- file opened in w+b --
629int(24)
630int(24)
631bool(false)
632string(24) "---water----fruit--air-
633"
634
635-- file opened in w+t --
636int(24)
637int(24)
638bool(false)
639string(%d) "---water----fruit--air-
640"
641
642-- file opened in x+ --
643int(24)
644int(24)
645bool(false)
646string(24) "---water----fruit--air-
647"
648
649-- file opened in x+b --
650int(24)
651int(24)
652bool(false)
653string(24) "---water----fruit--air-
654"
655
656-- file opened in x+t --
657int(24)
658int(24)
659bool(false)
660string(%d) "---water----fruit--air-
661"
662
663-- file opened in r+ --
664int(32)
665int(32)
666bool(false)
667string(32) "---water------fruit------air---
668"
669
670-- file opened in r+b --
671int(32)
672int(32)
673bool(false)
674string(32) "---water------fruit------air---
675"
676
677-- file opened in r+t --
678int(32)
679int(32)
680bool(false)
681string(%d) "---water------fruit------air---
682"
683
684-- file opened in a+ --
685int(32)
686int(32)
687bool(false)
688string(32) "---water------fruit------air---
689"
690
691-- file opened in a+b --
692int(32)
693int(32)
694bool(false)
695string(32) "---water------fruit------air---
696"
697
698-- file opened in a+t --
699int(32)
700int(32)
701bool(false)
702string(%d) "---water------fruit------air---
703"
704
705-- file opened in w+ --
706int(32)
707int(32)
708bool(false)
709string(32) "---water------fruit------air---
710"
711
712-- file opened in w+b --
713int(32)
714int(32)
715bool(false)
716string(32) "---water------fruit------air---
717"
718
719-- file opened in w+t --
720int(32)
721int(32)
722bool(false)
723string(%d) "---water------fruit------air---
724"
725
726-- file opened in x+ --
727int(32)
728int(32)
729bool(false)
730string(32) "---water------fruit------air---
731"
732
733-- file opened in x+b --
734int(32)
735int(32)
736bool(false)
737string(32) "---water------fruit------air---
738"
739
740-- file opened in x+t --
741int(32)
742int(32)
743bool(false)
744string(%d) "---water------fruit------air---
745"
746
747-- file opened in r+ --
748int(32)
749int(32)
750bool(false)
751string(32) "&&&""""&&:&&"&&:,:":&&,&&:,,,,&
752"
753
754-- file opened in r+b --
755int(32)
756int(32)
757bool(false)
758string(32) "&&&""""&&:&&"&&:,:":&&,&&:,,,,&
759"
760
761-- file opened in r+t --
762int(32)
763int(32)
764bool(false)
765string(%d) "&&&""""&&:&&"&&:,:":&&,&&:,,,,&
766"
767
768-- file opened in a+ --
769int(32)
770int(32)
771bool(false)
772string(32) "&&&""""&&:&&"&&:,:":&&,&&:,,,,&
773"
774
775-- file opened in a+b --
776int(32)
777int(32)
778bool(false)
779string(32) "&&&""""&&:&&"&&:,:":&&,&&:,,,,&
780"
781
782-- file opened in a+t --
783int(32)
784int(32)
785bool(false)
786string(%d) "&&&""""&&:&&"&&:,:":&&,&&:,,,,&
787"
788
789-- file opened in w+ --
790int(32)
791int(32)
792bool(false)
793string(32) "&&&""""&&:&&"&&:,:":&&,&&:,,,,&
794"
795
796-- file opened in w+b --
797int(32)
798int(32)
799bool(false)
800string(32) "&&&""""&&:&&"&&:,:":&&,&&:,,,,&
801"
802
803-- file opened in w+t --
804int(32)
805int(32)
806bool(false)
807string(%d) "&&&""""&&:&&"&&:,:":&&,&&:,,,,&
808"
809
810-- file opened in x+ --
811int(32)
812int(32)
813bool(false)
814string(32) "&&&""""&&:&&"&&:,:":&&,&&:,,,,&
815"
816
817-- file opened in x+b --
818int(32)
819int(32)
820bool(false)
821string(32) "&&&""""&&:&&"&&:,:":&&,&&:,,,,&
822"
823
824-- file opened in x+t --
825int(32)
826int(32)
827bool(false)
828string(%d) "&&&""""&&:&&"&&:,:":&&,&&:,,,,&
829"
830Done
831