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
|