منظورم از اینترنت اینه که موجود بودن فایل توی سرور خودم یا سایر سرورها چک بشه.
منظورم از اینترنت اینه که موجود بودن فایل توی سرور خودم یا سایر سرورها چک بشه.
با استفاده از تابع file_exists چك كنيد كه آيا فايل هست يا نه؟
اگر بود براي اطمينان حجم فايل رو هم مقايسه كنيد تا مطمئن بشيد كه همون فايل هست نه يك تشابه اسمي
تابع فایل file_exists فایلهای سایر سرورها رو نمی تونه چک کنه.
الان از تابع getimagesize استفاده می کنم ولی این تابع هم با https مشکل داره و این پروتوکل رو نمی خونه.
راه بهتری به نظرتون نمی رسه؟
سوکت و cURL هم هست فقط باید دقت کنید که وضعیت سرور شما و سرور مقصد میتونه تو نتیجه تاثیر داشته باشه یعنی اگه سرور مقصد اون لحظه جوابی برنگردونه یا سرور شما اتصال خوبی نداشته باشه فایل رو پیدا نمیکنه در حالیکه فایل هست.
ممکنه cURL توی سرور فعال نباشه.سوکت و cURL هم هست فقط باید دقت کنید که وضعیت سرور شما و سرور مقصد میتونه تو نتیجه تاثیر داشته باشه یعنی اگه سرور مقصد اون لحظه جوابی برنگردونه یا سرور شما اتصال خوبی نداشته باشه فایل رو پیدا نمیکنه در حالیکه فایل هست.
راه دیگه ای نیست؟
fopen هم هست با لینک مثل یک فایل برخورد میکنه و محتویات رو میخونه. (فقط برای وجود داشتن گفتن اما استفاده ازش رو برای تصویر پیشنهاد نمیکنم)
به تعداد درخواست هاتون هم توجه کنید با چک کردن چندین سرور به این روش ها ممکن زمان زیادی طول بکشه که مشکلات خودش رو در بر داره.
موفق باشید
fopen با https مشکلی نداره؟fopen هم هست با لینک مثل یک فایل برخورد میکنه و محتویات رو میخونه. (فقط برای وجود داشتن گفتن اما استفاده ازش رو برای تصویر پیشنهاد نمیکنم)
بنظرم باید از سوکت و درخواست از نوع HEAD استفاده کنی.
سرورها در جواب این درخواست فقط هدرها رو برمیگردونن و نه کل فایل رو.
در نتیجه میتونی موجود بودن فایل رو باهاش چک کنی.
البته HTTPS بنظرم یک داستان دیگه ای داره. یحتمل باید OpenSSL نصب باشه و استفاده کنی، اما بازم با درخواست HEAD. احتمالا فقط سوکت شما از نوع SSL میشه.
بنظرم برای چک کردن لینکها و آدرسهای HTTPS باید کاری کنیم که مرورگر کلید عمومی خودش رو هم ارسال کنه در صورتیکه با استفاده از توابع پی اچ پی، کلید عمومی ارسال نمی شه. نظرتون در این مورد چیه؟البته HTTPS بنظرم یک داستان دیگه ای داره. یحتمل باید OpenSSL نصب باشه و استفاده کنی، اما بازم با درخواست HEAD. احتمالا فقط سوکت شما از نوع SSL میشه.
خیر، مرورگر کلید عمومی خاصی رو ارسال نمیکنه.
اون چیزی که در اینترنت هست تقریبا همیشه احراز هویت یک طرفه هست. حداقل این کاری هست که سایت های عمومی میکنن.
یعنی سرور مورد نظر هویت خودش رو با استفاده از گواهینامه و امضای دیجیتال ثابت میکنه و بعدش هم که اطلاعات رد و بدل شده رمزنگاری میشن تا کلاینت مطمئن باشه داره با همون سرور صحبت میکنه و کسی هم نمیتونه اطلاعات رد و بدل شده رو این وسط بخونه یا دستکاری کنه.
کلاینت چیزی رو ثابت نمیکنه و برای سرور احراز هویت نمیشه. بنابراین هیچ گواهینامه و کلید عمومی ای از جانب کلاینت به سرور ارسال نمیشه.
سوکت Port هم میگیره دیگه. مشکل ssl با اون حل میشه. من گفتم با سوکت و cURL میشه شما سوکت رو نشنیده گرفتی. fsockopen
پس چرا توابع php نمی تونن وجود فایلها رو توی سرورهایی که از HTTPS استفاده می کنن رو شناسایی کنن؟یعنی سرور مورد نظر هویت خودش رو با استفاده از گواهینامه و امضای دیجیتال ثابت میکنه و بعدش هم که اطلاعات رد و بدل شده رمزنگاری میشن تا کلاینت مطمئن باشه داره با همون سرور صحبت میکنه و کسی هم نمیتونه اطلاعات رد و بدل شده رو این وسط بخونه یا دستکاری کنه.
می شه توضیح فنی بدید که چرا با سوکت مشکل حل می شه و توابع عادی نمی تونن مشکل رو حل کنن؟سوکت Port هم میگیره دیگه. مشکل ssl با اون حل میشه.
بخاطر اینکه ارتباط از طریق سوکت انجام میشه و سوکت هایی که برای HTTPS استفاده میشن باید از نوع SSL باشن.پس چرا توابع php نمی تونن وجود فایلها رو توی سرورهایی که از HTTPS استفاده می کنن رو شناسایی کنن؟
البته من تاحالا تست نکردم. ولی اگر کار نمیکنه حتما به این دلیل هست.
مگه نمی گید که سمت مروگر نیاز به تایید ارتباط نیست پس چرا باید از سوکت استفاده کرد؟بخاطر اینکه ارتباط از طریق سوکت انجام میشه و سوکت هایی که برای HTTPS استفاده میشن باید از نوع SSL باشن.
من الان چک کردم fopen هم که //:ssl رو پشتیبانی میکنه
تصویری که چک کرده بودید توی سرور خودتون بود یا از یه سرور دیگه؟من الان چک کردم fopen هم که //:ssl رو پشتیبانی میکنه
بعد از اینکه از fopen استفاده کردید چطور باید تشخیص بدم که فایل مورد نظر یه تصویر هست؟
هیچ کدوم. از سایت PHP !
http://www.php.net/manual/en/function.fopen.php
ببینیداگر فایل وجود نداشته باشه، این توابع اگه هدر برگردونند (مثل سوکت) ۴۰۴ برمیگردوند در غیر اینصورت معمولا False... اطلاعاتشون رو مطالعه کنید. ساده هستند.
به نظر من سادهترین و تمیزترین راه، cURL هست و در نهایت نتیجهی هیچکدوم قطعی نیست چون همونجور که گفتم به وضعیت دو تا سرور وابستهست...