PDA

View Full Version : سوال: مشکل در seek کردن فایل



alimooghashang
دوشنبه 19 دی 1390, 19:19 عصر
سلام
چرا فایل هایی که بصورت ریموت از یک سایت دیگه باز میشه قابلیت seek کردن ندارن؟
مثلا من یه فایل دارم رو یه هاست به این آدرس

mydomain.com/myfile.zip
و حجمش هم 200 مگ هست!
میخوام 100 مگ آخرش رو با fread بخونم
چطوری باید بخونم؟
seek که میکنم ارر میده میگه نمیشه!
ممنون

alimooghashang
دوشنبه 26 دی 1390, 18:25 عصر
یعنی هیچکسی نمیدونه باید چیکار کرد؟

mbf5923
دوشنبه 26 دی 1390, 18:52 عصر
دستوری که در Fopen استفاده میکنید؟
فکر کنم با این مشکلتون حل بشه:

$fp = fsockopen("mydomain.com/myfile.zip", 80);
while (!feof($fp)) { //This looped forever
$content .= fread($fp, 1024);
}

alimooghashang
دوشنبه 26 دی 1390, 18:59 عصر
ارر داد


Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known in test.php on line 4

mbf5923
دوشنبه 26 دی 1390, 19:08 عصر
والا تا اونجا که بنده اطلاع دارم خوند فایل از سرور دیگه باید با سوکت انجام بشه و توی php.net هم همین مسئله ذکر شده اما این که ارور میده رو باید تست کنم

alimooghashang
دوشنبه 26 دی 1390, 19:16 عصر
اشتباه از من بود که حلش کردم
خب حالا چطوری توی فایل seek کنم؟

mbf5923
دوشنبه 26 دی 1390, 19:30 عصر
بعد از اینکه فایلتون رو باز کردین از این دستور باید استفاده کنید:

$fp = fsockopen("mydomain.com/myfile.zip", 80);
$offset=104857600;
fseek($rs,$offset,SEEK_END);

alimooghashang
دوشنبه 26 دی 1390, 19:38 عصر
دوست عزیز من اینطوری موفق شدم


$fp = @fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /myfile.zip HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}

حالا تو این چطوری من میتونم seek کنم؟

mbf5923
دوشنبه 26 دی 1390, 19:44 عصر
فکر میکنم این باید باشه آخه من فعلا PHPندارم که تست بزنم

<?php
$fp = @fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)\n";
} else {
$out = "GET /myfile.zip HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
$offset=104857600;
fseek($fp,$offset,SEEK_END);
fclose($fp);
}
?>

mbf5923
دوشنبه 26 دی 1390, 19:47 عصر
این رو هم برات پیدا کردم یه نگاهی بنداز
http://php.net/manual/en/function.fseek.php

alimooghashang
دوشنبه 26 دی 1390, 19:47 عصر
فکر نمیکنم fseek اون fp رو قبول کنه!