summaryrefslogtreecommitdiff
path: root/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation3.phpt
blob: cbe4785ed089c768eb8ccdb731038ad789982829 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
--TEST--
Test symlink(), linkinfo(), link() and is_link() functions : usage variations - access/update file through softlink
--SKIPIF--
<?php
if (substr(PHP_OS, 0, 3) == 'WIN') {
    die('skip no symlinks on Windows');
}
?>
--FILE--
<?php
/* Prototype: bool symlink ( string $target, string $link );
   Description: creates a symbolic link to the existing target with the specified name link

   Prototype: bool is_link ( string $filename );
   Description: Tells whether the given file is a symbolic link.

   Prototype: bool link ( string $target, string $link );
   Description: Create a hard link

   Prototype: int linkinfo ( string $path );
   Description: Gets information about a link
*/

/* Variation 3 : Create file and a soft link to the file
                 Access data of the file through the soft link
                 Update the file through soft link
                 Check size of file and soft link link
*/

$file_path = dirname(__FILE__);
echo "*** Accessing and updating data of file through soft link ***\n";
// Creating file and inserting data into it
$filename = "$file_path/symlink_link_linkinfo_is_link_variation3.tmp";

// create temp file
$file = fopen($filename, "w");

// create soft link to file
$linkname = "$file_path/symlink_link_linkinfo_is_link_link_variation3.tmp";
var_dump( symlink($filename, $linkname) );
// storing size of symlink in a local variable
$link_stat = lstat($linkname);  // lstat of link
$link_size = $link_stat[7];  // size of soft link

// fill data into file
fwrite($file, str_repeat("text", 20) );
fclose($file);

echo "\n-- Access data of the file through the soft link --\n";
$data_from_link = file_get_contents($linkname);  // data read from $filename
var_dump( $data_from_link );

echo "\n-- Check size of soft link and file --\n";
var_dump( filesize($filename) );
var_dump( filesize($linkname) );

// taking lstat of symlink
$stat = lstat($linkname);
// checking that size of symlink remains same
if ($link_size == $stat[7])
  echo "\nSoft link size remains same \n";
else
  echo "\nWarning: Soft link size has changed \n";

echo "\n-- Updating file with data through soft link --\n";
// append link with data
$fp = fopen($linkname, "a");  // open in append mode
fwrite($fp, "Hello World");
fclose($fp);

// now check temp file for data; it should append "Hello World"
$data_from_file = file_get_contents($filename);
var_dump( $data_from_file );

echo "\n-- Check size of soft link and file --\n";
var_dump( filesize($filename) );
var_dump( filesize($linkname) );

// taking lstat of symlink
$stat = lstat($linkname);
// checking that size of symlink remains same
if ($link_size == $stat[7])
  echo "\nSoft link size remains same \n";
else
  echo "\nWarning: Soft link size has changed \n";

echo "\n-- Updating file with data and check data through soft link --\n";
// write to temp file
$file = fopen($filename, "w");
fwrite($file, "Hello World");
fclose($file);

// now check link for data; it should echo "Hello World"
$data_from_link = file_get_contents($linkname);
var_dump( $data_from_link );

echo "\n-- Check size of soft link and file --\n";
var_dump( filesize($filename) );
var_dump( filesize($linkname) );

// taking lstat of symlink
$stat = lstat($linkname);
// checking that size of symlink remains same
if ($link_size == $stat[7])
  echo "\nSoft link size remains same \n";
else
  echo "\nWarning: Soft link size has changed \n";

// delete the link
unlink($linkname);
// delete the temporary file
unlink($filename);

echo "Done\n";
?>
--EXPECTF--
*** Accessing and updating data of file through soft link ***
bool(true)

-- Access data of the file through the soft link --
string(80) "texttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttext"

-- Check size of soft link and file --
int(80)
int(80)

Soft link size remains same 

-- Updating file with data through soft link --
string(91) "texttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttextHello World"

-- Check size of soft link and file --
int(91)
int(91)

Soft link size remains same 

-- Updating file with data and check data through soft link --
string(11) "Hello World"

-- Check size of soft link and file --
int(11)
int(11)

Soft link size remains same 
Done