PDA

View Full Version : مشکل در include



aftabmahtab1
شنبه 28 دی 1392, 18:35 عصر
سلام دوستان

من میخوام وقتی روی منو که درونش با آدرس مشخص شده
<li><a href=index.php?Link='".$menu['Mlink']."' >".$menu['Mtitle']."</a></li>
ودر قسمت بالا ظاهر میشود
را include کنم در وسط صفحه اصلیم درواقع میخوام لینک بشه مثلا به گوگل وصفخه گوگل دراینجا نمایش پیداکند

اما وقتی مینویسم include ($_GET['Link']); اررور میده .اما اگه خود http://www.google.com را بنویسم میاره

سوال دوم .چکار کنم وقتی آدرس جایی را includeکردم کوچک بشود و همسایز div من بشود

مرسی

danial.saeedi
شنبه 28 دی 1392, 20:46 عصر
اگه شما این جوری بنویسی یک نقص امنیتی داره که به وسیله تابع escapeshellarg() می تونی حذفش کنید.
در ضمن فایل رو پیدا نمی کنه برای همین ارور می ده.

فرزند کوروش
شنبه 28 دی 1392, 21:46 عصر
ینی میخای بنویسی

include("http://google.com");
:افسرده::افسرده:
اگه نه بیشتر توضیح بده

aftabmahtab1
شنبه 28 دی 1392, 23:33 عصر
ینی میخای بنویسی

include("http://google.com");
:افسرده::افسرده:
اگه نه بیشتر توضیح بده

:لبخند:چرا گریه میکنید
نه بابا اینجوری نمیخوام بنویسم .اما فکر کنم چون مدل mvc نوشتم باید اینم mvcبنویسم تا کار بده

ببینید من در صفحه اصلی منو را include میکنم.روی هر کدام که کلیک میکنم براساس چیزی که نوشتم بصورت آدرس در بالا ظاهر میشود .
مثلا index.php?articleid=2 این میاد محتواهایی که 2 هستن را میاره وسط صفحه
الان من وقتی روی یکی از منو هام کلیک میکنم اینجوریه index.php?link='www.google.com' الان من میخوام وقتی روی این منو کلیک کردم یجوری بیاد این لینک را بخونه وصفحه لینک را در وسط صفحه نمایش بده نمیدونم چجوری تعریف کنم با get هم نميشه

نمیدونم چکار کنم

MMSHFE
یک شنبه 29 دی 1392, 01:21 صبح
خوب دوست عزیز، اولاً اگه فایلی که میخواین include بشه رو با روشهایی مثل Get میخونید، حتماً از White List استفاده کنید تا یک وقت کسی نیاد فایل etc/passwd/ رو include کنه و رمزهای سرورتون رو بدست بیاره! ثانیاً برای خوندن محتوای سایر سایتها نباید اونها رو include کنید بلکه باید با file_get_contens و اگه روی سرورتون allow_url_fopen بسته بود، با cURL محتواشون رو بخونید. include و require فقط روی فایلهای سرور خودتون جواب میده. اونهم به شرطی که permission داشته باشین.

p30online
یک شنبه 29 دی 1392, 02:00 صبح
دوستان اگر قبل از اینکلود @ گذاشت اشکالی که نداره ،داره؟ بعد چه کار کنیم در صورتی که به بانک وصل نشد سایت را کامل نشان دهد و وسط کار نگوید به دیتابیس وصل نیست یا ....؟

MMSHFE
یک شنبه 29 دی 1392, 09:04 صبح
وجود @ قبل از یک دستور باعث میشه پیغامهای خطای احتمالی در اجرای اون دستور نشون داده نشه و به معنی رفع مشکل نیست. فقط روش سرپوش گذاشتین. اما اینکه میگین اگه به دیتابیس وصل نشد، باز هم سایت رو نشون بده و نگه که به دیتابیس وصل نیست، ازنظر منطقی درست نیست چون بخش زیادی از محتوای سایتهای Dynamic از دیتابیس خونده میشه اما با این حال شما میتونید از روشهایی مثل Cache کردن اطلاعات سمت سرور و نمایش آخرین محتوای Cache شده تا زمانی که دیتابیس مجدداً در دسترس قرار بگیره استفاده کنید و برای اینکه خودتون هم متوجه بشین که داره از Cache میخونه میتونید کدی بنویسید که اگه نتونست به دیتابیس وصل بشه، با ایمیل یا پیامک و... شما رو مطلع کنه.

aftabmahtab1
یک شنبه 29 دی 1392, 16:48 عصر
مرسی مدیر اما من تاحالا از این تابع استفاده نکردم سرچ زدم اینجوری نوشتم ولی اررور میده
if(isset($_GET['Link'])){
$w=$_GET['Link'];

$c = file_get_contents($w);
echo $c;
Warning: file_get_contents('http://www.google.com'): failed to open stream: Invalid argument in C:\xampp\htdocs\site\cmsProject\index.php on line 102


علاوه بر این سوال دوم هم میشه پاسخ دهید ممنون

MMSHFE
یک شنبه 29 دی 1392, 17:00 عصر
درمورد سؤال اولتون، ظاهراً توی هاست شما بازکردن فایلهای سایر سایتها با fopen بسته شده و باید از cURL استفاده کنید. مثال:


$ch = curl_init($_GET['link']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$result = curl_exec($ch);

درمورد سؤال دوم هم باید محتوای داخل body رو بخونید و فقط اون رو داخل div خودتون بگذارین. البته برای برخی از سایتها شاید لازم باشه Styleها رو هم کمی دستکاری کنید. همچنین Styleهایی که در قسمت head تعریف شدن رو هم جداگانه خودتون تعریف کنید. مثال:


if(preg_match('#<body.*?>(.*?)</body>#i', $result, $match)) {
echo '<div class="contents">' . PHP_EOL;
echo $match[1] . PHP_EOL;
echo '</div>' . PHP_EOL;
}

البته باید افزونه php_curl روی هاست شما نصب و فعال باشه. اگه نبود، با پشتیبانی تماس بگیرین تا براتون فعال کنه.