PDA

View Full Version : توضیح در مورد تابع fgets



Gold_cpp
جمعه 11 فروردین 1391, 09:15 صبح
سلام دوستان
یک کد ساده داریم که بعد از اینکه فایل salam.php رو باز کرد تا زمانی که به پایان فایل مذکور نرسیدیم محتویات آن را چاپ میکند برای درک بهتر این که چه عملی انجام میشود اومدم موقع پرینت کردن یک تک
<br /> اضافه کردم


<?php
$filename = "salam.php";
$fp = fopen( $filename, "r" ) or die("Couldn't open $filename");
while ( ! feof( $fp ) )
{
$line = fgets( $fp, 7 );
print "$line<br>"; //print "$line<br>";
}
?>

حالا که توی سورس صفحه چاپ شده نگاه میکنم میبینم که اول همه لاین ها به جز اولین چاپ تک <br />
اضافه شده است
دوستان میتونن علت رو بهم توضیح بدن ؟؟



<html>
<head>
</head>
<body>
<!-- in avalin line hast ke chap shode ! -->
<html><br />
<br /><head><br />
<br /></head<br />>
<br /><body><br />
<br /><form <br />action<br />="sala<br />m.php"<br /> metho<br />d="pos<br />t">
<br /> <i<br />nput t<br />ype="s<br />ubmit"<br /> value<br />="goTo<br />Submit<br /> !"/>
<br />
<br /> <br /> <sel<br />ect na<br />me="co<br />mpany[<br />]" mul<br />tiple=<br />"multi<br />ple">
<br />
<br /> <br /> <opt<br />ion>IB<br />M</opt<br />ion>
<br /> <br /> <opt<br />ion>SO<br />NY</op<br />tion>
<br />
<br /> <br /> <opt<br />ion>SU<br />MSONG<<br />/optio<br />n>
<br /> <br /> <opt<br />ion>LG<br /></opti<br />on>
<br /> </<br />select<br />>
<br /></form<br />>
<br /><?php
<br />
<br />if ( i<br />s_arra<br />y( $_P<br />OST['c<br />ompany<br />'] ) )<br />
<br />{
<br /> ec<br />ho "<s<br />elect><br />\n";
<br /> forea<br />ch ( $<br />_POST[<br />'compa<br />ny'] a<br />s $va <br />)
<br /> {
<br />
<br /> <br /> prin<br />t "<op<br />tion>$<br />va</op<br />tion>"<br />;
<br /> } <br />
<br /> echo <br />"</sel<br />ect>";<br />
<br />}
<br />?>
<br /></body<br />>
<br /></html<br />><br /></body>
</html>

این هم محتویات داخل فایل salam.php


<html>
<head>
</head>
<body>
<form action="salam.php" method="post">
<input type="submit" value="goToSubmit !"/>
<select name="company[]" multiple="multiple">
<option>IBM</option>
<option>SONY</option>
<option>SUMSONG</option>
<option>LG</option>
</select>
</form>
<?php
if ( is_array( $_POST['company'] ) )
{
echo "<select>\n";
foreach ( $_POST['company'] as $va )
{
print "<option>$va</option>\n";
}
echo "</select>";
}
?>
</body>
</html>

MMSHFE
جمعه 11 فروردین 1391, 09:29 صبح
این کد رو امتحان کنید ببینید درست میشه یا نه؟


$filename = 'salam.php';
$fp = fopen($filename, 'r') or die("Couldn't open {$filename}");
echo '<pre>'.PHP_EOL;
while (!feof($fp)) {
$line = fgets($fp);
echo $line.PHP_EOL;
}
echo '</pre>'.PHP_EOL;
fclose($fp);

برای من که درست کار کرد.

Gold_cpp
جمعه 11 فروردین 1391, 09:51 صبح
ممنون دوست عزیز ولی نه !
ببینید این خط چی میگه :
$line = fgets( $fp, 7 );
میگه فایلی که fopen اون رو باز کرده رو بگیر و 7 تا کاراکتر برو جلو(توی همون خط) بعد دستور بعد میگه که
print "$line<br />"
اون 7 تا کاراکتر را که خواندی چاپ کن و بعدش هم یک <br /> بذار;
اولین باری که چاپ میشه این صجبت من رو درست اجرا میکنه (برای درک بهتر ctrl + u همون فایل چاپ شده را بزنید تا سورس رو ببینید)
ولی از خط بعدی به ابتدای هر لاین یک تک <br /> اضافه میکند
علتش چیه ؟؟

MMSHFE
جمعه 11 فروردین 1391, 10:03 صبح
باز هم برای من درست کار کرد (همون کدی که خودتون گذاشتین). شاید مشکل از جای دیگه باشه. اگه میشه خود فایلها رو ضمیمه کنید تا ببینیم مشکل چیه؟

Gold_cpp
جمعه 11 فروردین 1391, 10:20 صبح
:متفکر:
فایل را آپلود کردم
:قلب:

MMSHFE
جمعه 11 فروردین 1391, 11:31 صبح
خوب عزیز شما خودتون دارین 7 کارکتر به 7 کارکتر میخونید و آخر هر خوندن، br درج میکنید، بعد میگین brها از کجا میاد؟ 7, رو از دستور fgets حذف کنید تا درست بشه. موفق باشید. ضمناً اگه میخواین سورس کد رو نشون بدین، از htmlspecialchars هم استفاده کنید:


<html>
<body>
<?php
$fp = fopen("ha.php","r") or die ("can't open file :( ");
while (!feof($fp)){
$line = fgets($fp);
echo htmlspecialchars($line).'<br />'.PHP_EOL;
}
fclose ($fp);
?>
</body>
</html>

موفق باشید.