به درست آوردن موقعیت و انتقال اشاره گر به مکانی دیگر

فرض کنید که یک فایل با نام text.txt در درایو :C دارید و در آن جمله !Hello World نوشته شده است و می خواهیم بعد از خوانده شدن تعداد خاصی از کاراکترها موقعیت اشاره گر را به دست بیاوریم که در کجای فایل است. برای این کار از تابع ()ftell به صورت زیر استفاده می کنیم :

<?php    
    $file = fopen('c:\test.txt','r');        
    fgets($file,6);    
    echo ftell($file);    
?>
5

همانطور که در کد بالا مشاهده می کنید با استفاده از تابع ()fopen فایل را باز کرده،سپس با تابع ()fgets شش کاراکتر اول را می خوانیم. از آنجاییکه این تابع یک کاراکتر کمتر از آن چیزی که برایش تعریف کرده ایم می خواند،یعنی تا پایان کلمه Hello. در نتیجه نشانگر بعد از حرف o قرار می گیرد و اگر با استفاده از تابع ()ftell بخواهیم که بدانیم نشانگر کجاست عدد 5 را به ما نشان می دهد:
Move-Corsur-in-php-2
حال فرض کنید می خواهیم موقعیت کنونی اشاره گر را به ابتدای فایل بیاوریم برای این کار از تابع ()rewind به صورت زیر استفاده می کنیم :

<?php    
    $file = fopen('c:\test.txt','r');        
    fgets($file,6);
    rewind($file);    
    echo ftell($file);    
?>
0

همانطور که در خروجی مشاهده می کنید عدد 0 نمایش داده شده است چون بعد از خوانده شدن 5 کاراکتر به وسیله تابع ()fgets در خط بعد از آن با از استفاده از تابع ()rewind اشاره گر را به ابتدای فایل آورده ایم و در نهایت تابع ()ftell به ما می گوید که اشاره گر در ابتدای فایل است :
Move-Corsur-in-php-3

گاهی اوقات نیر ممکن است که بخواهید اشاره گر را به نقطه ای خاص، جهت خواندن از یا نوشتن در فایل انتقال دهید. برای این کار می توانید از تابع ()fseek استفاده کنید. به مثال زیر توجه کنید :

<?php    
    $file = fopen('c:\test.txt','r');
    fseek($file,6,SEEK_SET);        
    echo fgets($file,6);
?>
world

به آرگومان دوم این تابع یعنی عدد 6 توجه کنید. این عدد بدین معناست که چند کاراکتر نشانگر را به جلو ببرد. یعنی هر کاری که قرار است روی فایل انجام شود از کاراکتر 6 به بعد باشد. آرگومان سوم هم سه مقدار می گیرد :

مقدار کاربرد
SEEK_SET مبدا حرکت نشانگر ابتدای فایل در نظر گرفته می شود
SEEK_CUR مبدا حرکت نشانگر موقعیت کنونی نشانگر در نظر گرفته می شود
SEEK_END مبدا حرکت نشانگر انتهای فایل در نظر گرفته می شود

پس دلیل اینکه چرا در مثال بالا خروجی کلمه world است این است که تابع ()fseek نشانگر را 6 کاراکتر به جلو می کشد و از آنجا به بعد 6 یا در اصل 5 کاراکتر توسط تابع ()fgets خوانده و چاپ می شود.

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر مطرح بفرمایید.