PDA

View Full Version : مبتدی: php header



h.torabi
پنج شنبه 03 بهمن 1392, 16:15 عصر
سلام به همه شما ...

میشه بگید کار این php heder چیه؟؟

اگه یه مثال بزنین دیگه عالیه....

farazsahebdel
پنج شنبه 03 بهمن 1392, 16:21 عصر
منظورتون اینه ؟



header("Location: http://www.example.com/");

h.torabi
پنج شنبه 03 بهمن 1392, 17:41 عصر
سلام اره

کلا کارش چیه....

farazsahebdel
پنج شنبه 03 بهمن 1392, 18:09 عصر
تو این قسمت که http://www.example.com/ به اینجا منتقل می شه.
مثلا بعد از موفق شدن لاگین به صفحه ی پروفایل می ره.

h.torabi
پنج شنبه 03 بهمن 1392, 21:18 عصر
سلام
میشه یه خورده بیشتر توضیح بدید

بابا نا سلامتی ما مبتدی هستیم

p30online
پنج شنبه 03 بهمن 1392, 21:25 عصر
دوست خوب ببین از این دستور برای منتقل کردن به یک صفحه دیگر استفاد ه می شود
مثلا من در اینجا اگر x برابر با یک نبود منتقل می شود به صفحه index.php




if(!($_SESSION['x']=='1'))
{
header('location:index.php');
exit();
}

thacker
پنج شنبه 03 بهمن 1392, 21:37 عصر
با استفاده از دستور header در php برای ارسال header های مختلف به مرورر استفاده میشه.باید دقت داشته باشید که این دستور باید قبل از هر چیزی به سمت مرورگر ارسال بشه و گرنه با پیغام خطالی :

Warning: Cannot modify header information – headers already sent by (output started at
با استفاده از این دستور میتونیم مشخص کنیم که محتوای صفحه ارسالی به مرورگر چیه و مرورگر چه رفتاری باید باهاش داشته باشه.

در ادامه به معرفی تعدادی از کاربردهای دستور header میپردازیم :
ریدایرکت مرورگر به یک صفحه دیگر :


header('Location: http://barnamenevis.org')

با استفاده از کد زیر مرورگر بعد از ۱۰ ثانیه به آدرسی که در قسمت url نوشتیم redirect میشه(انتقال پیدا میکنه)


header('Refresh: 10; url=http://www.example.org/');

برای دانلود یک فایل توسط مرورگر از کد زیر استفاده میکنیم :


header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="example.zip"');
header('Content-Transfer-Encoding: binary');
// load the file to send:
readfile('example.zip');

صفحه پیدا نشد


header('HTTP/1.1 404 Not Found');

دسترسی غیر مجاز


header('HTTP/1.1 403 Forbidden');

خطای سرور


header('HTTP/1.1 500 Internal Server Error');

MIME Type های معروف و پرکاربرد

CSS


header('Content-type: text/css');Javascript


header('Content-type: text/javascript');JPEG


header('Content-type: image/jpeg');JSON


header('Content-type: application/json');PDF


header('Content-type: application/pdf');RSS


header('Content-Type: application/rss+xml; charset=utf-8');متن ساده


header('Content-type: text/plain');XML


header('Content-type: text/xml');GIF


header('Content-Type: image/gif');PNG


header('Content-Type: image/png');

setareban
جمعه 04 بهمن 1392, 10:55 صبح
برای دانلود یک فایل توسط مرورگر از کد زیر استفاده میکنیم :


header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="example.zip"');
header('Content-Transfer-Encoding: binary');
// load the file to send:
readfile('example.zip');


با سلام خدمت شما و تشکر بابت مطلب خوبتون.
من از طریق کد زیر دانلود رو انجام میدم ولی فقط فایلهای زیر 10 مگابایت رو میشه دانلود کرد:

<?php
$dlfile = 'http://مسیر فایل دانلود/test.rar';
$strFileSec = 'free.rar';
$strFile = file_get_contents($dlfile);
$size = mb_strlen($strFile);
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=\"".str_replace(" ", "_", $strFileSec)."\"");
header('Content-Length: ' . $size);
echo $strFile;
exit();
?>
و فایلهای بیشتر از 10 مگابایت با پیغام زیر مواجه میشم:
File not found
Firefox can't find the file at http://setareban.com/test.php.

ولی وقتی با کدهایی که شما در این تاپیک گذاشتید، دانلود میکنم، این محدودیت به 30 مگابایت رسیده
یعنی فایلهای زیر 30 مگابایت رو دانلود میکنه. و بیشتر از اون رو اصلا هیچ اقدامی نمیکنه.
میخواستم اگر ممکنه راهنمایی بفرمایید که مشکل از کجاست.
و اگر بخواهیم هیچ محدودیتی در دانلود نداشته باشیم مثلا فایلهای زیر 200 مگابایت رو بتونیم به راحتی
دانلود کنیم، چه باید کرد.
توضیح اینکه بنده فایلهام رو روی هاست دانلود قرار دادم و از هاست سایت به اونجا متصل میشم.
با تشکر فراوان

thacker
شنبه 05 بهمن 1392, 21:30 عصر
اینجا رو مطالعه کنید . فکر کنم به کارتون بیاد : http://cyberrabbits.net/264/download-with-resume-support-in-php/

setareban
شنبه 05 بهمن 1392, 23:58 عصر
اینجا رو مطالعه کنید . فکر کنم به کارتون بیاد : http://cyberrabbits.net/264/download-with-resume-support-in-php/
ممنون از راهنماییتون.
توضیحاتش خوب بود و همینطور کدهاش ولی...
ولی یه نکته ی جالب برام پیش اومد اینکه، فایلی رو که از هاست سایتم دانلود میکنم که نیازی به آدرس دهی به شکل http:// نداره، بدون مشکل دانلود میکنه.

$data_file="gallery/video/asrejadid.rar";
اما زمانی که از هاست دانلودم دانلود میکنم و مجبورم برای آدرس دهی از http:// استفاده کنم، دانلود با مشکل مواجه میشه.

$data_file="http://آدرس فایل.rar";
به نظر شما مشکل از کجا میتونه باشه؟ و یا چطور میتونم این مشکل رو حل کنم؟
با تشکر

MMSHFE
یک شنبه 06 بهمن 1392, 01:00 صبح
چون با file_get_contents یا fread محتوای فایل رو میخونید و دسترسی به فایلهای Remote توسط این دستورات توی هاستهای اشتراکی بنا به مسائل امنیتی بسته شده، باید ابتدا با cURL یا wget فایل رو از هاست Remote به سرور خودتون منتقل کنید و بعد از اونجا برای دانلود بگذارین یا اگه مسئله پنهان بودن آدرس اصلی و سایر مباحث امنیتی فایلهای Remote خیلی مهم نیست، اگه دیدین آدرس فایل با http شروع میشه، کاربر رو مستقیماً به همون آدرس Redirect کنید.

setareban
یک شنبه 06 بهمن 1392, 08:23 صبح
چون با file_get_contents یا fread محتوای فایل رو میخونید و دسترسی به فایلهای Remote توسط این دستورات توی هاستهای اشتراکی بنا به مسائل امنیتی بسته شده، باید ابتدا با cURL یا wget فایل رو از هاست Remote به سرور خودتون منتقل کنید و بعد از اونجا برای دانلود بگذارین یا اگه مسئله پنهان بودن آدرس اصلی و سایر مباحث امنیتی فایلهای Remote خیلی مهم نیست، اگه دیدین آدرس فایل با http شروع میشه، کاربر رو مستقیماً به همون آدرس Redirect کنید.
مهندس جان اگر قرار بود من این فایلها که ممکنه به 10 گیگابایت برسه رو به هاست سایتم منتقل کنم که دیگه هاست دانلود نمیخریدم.
دوم اینکه دستور file_get_contents برای مشکل اولیم بود که جناب «thacker (http://barnamenevis.org/member.php?239552-thacker)» آدرسی دادند که کدهاش این بود:

<?php
date_default_timezone_set('GMT');

//1- file we want to serve :
$data_file="/usr/home/f0rud/Desktop/largefile";
$data_size=filesize($data_file);
$mime='application/otect-stream'; //Mime type of file. to begin download its better to use this.
$filename=basename($data_file); //Name of file, no path included

//2- Check for request, is the client support this method?
if (isset($_SERVER['HTTP_RANGE']) || isset($HTTP_SERVER_VARS['HTTP_RANGE'])){
$ranges_str=(isset($_SERVER['HTTP_RANGE']))?$_SERVER['HTTP_RANGE']:$HTTP_SERVER_VARS['HTTP_RANGE'];
$ranges_arr=explode('-', substr($ranges_str , strlen('bytes=')));
//Now its time to check the ranges
$ranges_arr[0]=intval($ranges_arr[0]);
if ((intval($ranges_arr[0])>=intval($ranges_arr[1]) &&
$ranges_arr[1]!="" &&
$ranges_arr[0]!="" ) ||
($ranges_arr[1]=="" && $ranges_arr[0]=="")){
//Just serve the file normally request is not valid :(
$ranges_arr[0]=0;
$ranges_arr[1]=$data_size;
}
} else { //The client dose not request HTTP_RANGE so just use the entire file
$ranges_arr[0]=0;
$ranges_arr[1]=$data_size;
}

//Now its time to serve file
$file=fopen($data_file,'rb');

//I use seek and tell to find the location, since I'm too lazy now
//You may use some + or - instead of all this :)
if ($ranges_arr[0]==""){
//Status 1 : the first one dose not exist
fseek($file, - intval($ranges_arr[1]),SEEK_END);
$seek_start=ftell($file);
fseek($file, intval($ranges_arr[1]),SEEK_CUR);
$seek_end=ftell($file);
}elseif ($ranges_arr[1]==""){
//Status 2 : the last one dose not exist
fseek($file,intval($ranges_arr[0]),SEEK_SET);
$seek_start=ftell($file);
fseek($file, $data_size - intval($ranges_arr[1]),SEEK_CUR);
$seek_end=ftell($file);
}else{
//Status 3 : Both are here :)
fseek($file,intval($ranges_arr[0]),SEEK_SET);
$seek_start=ftell($file);
fseek($file, intval($ranges_arr[1])-intval($ranges_arr[0]),SEEK_CUR);
$seek_end=ftell($file);
}

//Lets send headers

header('HTTP/1.0 206 Partial Content');
header('Status: 206 Partial Content');
header('Accept-Ranges: bytes');

header('Content-type: ' . $mime);
header('Content-Disposition: attachment; filename="' . $filename . '"');
header("Content-Range: bytes $seek_start-$seek_end/$data_size");
header("Content-Length: " . ($seek_end - $seek_start));

//Finally serve data and done ~!
$data_len=$seek_end - $seek_start;
fseek($file,$seek_start,SEEK_SET);
$bufsize=2048;

ignore_user_abort(true);
@set_time_limit(0);
while (!(connection_aborted() || connection_status() == 1) && $data_len > 0){
if ($data_len < $bufsize)
echo fread($file , $data_len);
else
echo fread($file , $bufsize);
$data_len -= $bufsize;
flush();

}

fclose($file);
?>
با استفاده از این کد چرا فایلی رو که از هاست سایتم دانلود میکنم که نیازی به آدرس دهی به شکل http:// نداره، بدون مشکل دانلود میکنه؟
ولی زمانی که از هاست دانلودم دانلود میکنم و مجبورم برای آدرس دهی از http:// استفاده کنم، دانلود با مشکل مواجه میشه؟ چرا؟
آیا به خاطر اینه: $_SERVER['HTTP_RANGE']
حالا راه حل چیه؟

MMSHFE
یک شنبه 06 بهمن 1392, 12:14 عصر
ارتباطی به نوع هاستتون نداره. وقتی URL fopen رو بسته باشن نمیتونید فایلهای سایر هاستها رو با دستورات فایل بخونید و باید از curl استفاده کنید. اگه root سرور دستتونه، بازش کنید یا اگه نیست به پشتیبانی بگین. در غیر اینصورت راه حل همونه که گفتم.

setareban
یک شنبه 06 بهمن 1392, 12:52 عصر
ارتباطی به نوع هاستتون نداره. وقتی URL fopen رو بسته باشن نمیتونید فایلهای سایر هاستها رو با دستورات فایل بخونید و باید از curl استفاده کنید. اگه root سرور دستتونه، بازش کنید یا اگه نیست به پشتیبانی بگین. در غیر اینصورت راه حل همونه که گفتم.
پس من یه سر برم تاپیک کلاس قدرتمند CURL + استفاده آسان (http://barnamenevis.org/showthread.php?386354-%DA%A9%D9%84%D8%A7%D8%B3-%D9%82%D8%AF%D8%B1%D8%AA%D9%85%D9%86%D8%AF-CURL-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A2%D8%B3%D8%A7%D9%86)

ببینم میتونم مشکلم رو حل کنم یا نه.
خیلی ممنون.

skarimi1369
شنبه 03 آبان 1393, 15:39 عصر
سلام در مورد
header('Refresh: 10; url=http://www.example.org/');

چطور ميشه به جاي 10 متغيير قرار داد و متغير از پايگاه داده پر كرد؟

MMSHFE
شنبه 03 آبان 1393, 15:49 عصر
header("Refresh: {$timeout}; url=http://www.example.org/");

skarimi1369
شنبه 03 آبان 1393, 16:38 عصر
سلام نشد مثل اينكه عدد صفر خوانده ميشه ولي واقعا صفر نيست عدد هست مثلا60

skarimi1369
یک شنبه 04 آبان 1393, 14:16 عصر
سلام باكد زير صفحه به آدرس مشخص شده يا با زمان صفر ميره يا اصلا نميره و گير ميكنه
در صورتي كه روي 60 ثانيه يعني 60 متغير مقدار داده مي شود
header("Refresh: {$timeout}; url=http://www.example.org/");

MMSHFE
یک شنبه 04 آبان 1393, 14:23 عصر
با اعداد کمتر تست کنید یا قبلش این کد رو بگذارین ببینید درست میشه:

settype($timeout, 'integer');
هرچند بعید میدونم مشکل از اینا باشه. یکبار هم اینو اکو کنید ببینید چی چاپ میشه:

echo "Refresh: {$timeout}; url=http://www.example.org/");

skarimi1369
یک شنبه 04 آبان 1393, 16:24 عصر
سلام درست شد تشكريه سوال ديگه شرمنده در تاپيك زير هستhttp://barnamenevis.org/showthread.php?473685-%D9%85%D8%B4%D9%83%D9%84-%D8%AF%D8%B1-%D9%83%D8%A7%D8%B1-%D8%A8%D8%A7-%D9%84%D8%A7%D9%8A%D9%83&p=2123787#post2123787

skarimi1369
یک شنبه 04 آبان 1393, 17:56 عصر
سلام كد شد اين ولي نتيجه ميده صفر در صورتي كه يك ركرود با اين شرايط هست
$tourl="http://pas.ir";

settype($tourl,"string");

SELECT COUNT(`id`) FROM `web_popup` WHERE `url` LIKE '%$tourl%' and `user_id`='1' and `status`=1