<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>طراحی سایت، ربات تلگرام و راهکارهای هوش مصنوعی | پشتیبانی 24 ساعته | مشاوره رایگان | Piero.ir</title>
	<atom:link href="https://piero.ir/feed/" rel="self" type="application/rss+xml" />
	<link>https://piero.ir</link>
	<description>Piero.ir ارائه‌دهنده طراحی سایت حرفه‌ای، ساخت ربات تلگرام، اتوماسیون n8n، هوش مصنوعی، یادگیری ماشین و راه‌اندازی استارتاپ‌های نوآورانه. راهکارهای اختصاصی و مشتری‌محور برای رشد کسب‌وکار شما.</description>
	<lastBuildDate>Mon, 10 Nov 2025 12:24:06 +0000</lastBuildDate>
	<language>fa-IR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://piero.ir/wp-content/uploads/2025/08/logopiero-100x100.png</url>
	<title>طراحی سایت، ربات تلگرام و راهکارهای هوش مصنوعی | پشتیبانی 24 ساعته | مشاوره رایگان | Piero.ir</title>
	<link>https://piero.ir</link>
	<width>32</width>
	<height>32</height>
</image> 
        <wp_options>
            <wp_option>
                <name>
                    shopengine_activated_templates                </name>
                <val>
                    a:0:{}                </val>
            </wp_option>
        </wp_options>
        	<item>
		<title>آموزش ریاضی برای هوش مصنوعی (پیش‌نیازهای ریاضی یادگیری ماشین)</title>
		<link>https://piero.ir/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%db%8c%d8%a7%d8%b6%db%8c-%d8%a8%d8%b1%d8%a7%db%8c-%d9%87%d9%88%d8%b4-%d9%85%d8%b5%d9%86%d9%88%d8%b9%db%8c/</link>
					<comments>https://piero.ir/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%db%8c%d8%a7%d8%b6%db%8c-%d8%a8%d8%b1%d8%a7%db%8c-%d9%87%d9%88%d8%b4-%d9%85%d8%b5%d9%86%d9%88%d8%b9%db%8c/#respond</comments>
		
		<dc:creator><![CDATA[پیروز جنابی]]></dc:creator>
		<pubDate>Mon, 10 Nov 2025 12:24:04 +0000</pubDate>
				<category><![CDATA[دسته‌بندی نشده]]></category>
		<guid isPermaLink="false">https://piero.ir/?p=13011</guid>

					<description><![CDATA[چرا آموزش ریاضی برای هوش مصنوعی (پیش‌نیازهای ریاضی یادگیری ماشین) حیاتی است؟ اگر بخواهیم تنها یک زبان برای برقراری ارتباط بین انسان و هوش مصنوعی انتخاب کنیم، آن زبان بدون شک ریاضیات است. الگوریتم‌های یادگیری ماشین، از مدل‌های ساده رگرسیون خطی تا شبکه‌های عصبی عمیق، همگی بر پایه مفاهیم ریاضی ساخته شده‌اند.در واقع، بدون درک [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">چرا آموزش ریاضی برای هوش مصنوعی (پیش‌نیازهای ریاضی یادگیری ماشین) حیاتی است؟</h3>



<p>اگر بخواهیم تنها یک زبان برای برقراری ارتباط بین انسان و هوش مصنوعی انتخاب کنیم، آن زبان بدون شک <strong>ریاضیات</strong> است. الگوریتم‌های یادگیری ماشین، از مدل‌های ساده رگرسیون خطی تا شبکه‌های عصبی عمیق، همگی بر پایه مفاهیم ریاضی ساخته شده‌اند.<br>در واقع، بدون درک مفاهیم ریاضی، درک واقعی از نحوه تصمیم‌گیری مدل‌های یادگیری ماشین غیرممکن است.</p>



<p>در این مطلب از <strong><a href="https://piero.ir" data-type="link" data-id="https://piero.ir">piero.ir</a></strong> به‌صورت گام‌به‌گام پیش‌نیازهای ریاضی یادگیری ماشین را بررسی می‌کنیم و توضیح می‌دهیم چرا تسلط بر این مباحث برای افرادی که قصد ادامه تحصیل در رشته‌های هوش مصنوعی در خارج از کشور دارند، ضروری است.</p>



<h2 class="wp-block-heading">جبر خطی — قلب تپنده یادگیری ماشین</h2>



<p>هر مدل یادگیری ماشین، داده‌ها را در قالب ماتریس‌ها و بردارها پردازش می‌کند. از وزن‌های مدل تا ورودی‌های شبکه عصبی، همه و همه در قالب <strong>جبر خطی</strong> تعریف می‌شوند.<br>برای شروع، لازم است بر مفاهیم زیر مسلط باشید:</p>



<ul class="wp-block-list">
<li>ماتریس‌ها و عملیات ماتریسی</li>



<li>بردارها و ضرب داخلی</li>



<li>مقادیر ویژه (Eigenvalues) و بردارهای ویژه (Eigenvectors)</li>



<li>تجزیه SVD و کاربرد آن در فشرده‌سازی داده‌ها</li>
</ul>



<p>درک این مفاهیم به شما کمک می‌کند بفهمید الگوریتم‌هایی مثل <strong>Principal Component Analysis (PCA)</strong> یا <strong>Neural Networks</strong> چگونه کار می‌کنند.<br>تقریباً هیچ الگوریتم یادگیری ماشین بدون جبر خطی قابل درک یا پیاده‌سازی نیست.</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://www.aparat.com/v/d2OHq?refererRef=search" target="_blank" rel="noopener">شروع آموزش جبر خطی</a></div>
</div>



<h2 class="wp-block-heading">آمار و احتمال — مغز تحلیلی یادگیری ماشین</h2>



<p>یادگیری ماشین بدون آمار و احتمال مانند نقشه‌ای بدون جهت‌نماست.<br>در این بخش شما باید مفاهیمی مانند موارد زیر را یاد بگیرید:</p>



<ul class="wp-block-list">
<li>توزیع‌های آماری (Normal, Bernoulli, Binomial)</li>



<li>میانگین، واریانس و انحراف معیار</li>



<li>قانون احتمال شرطی و بیز</li>



<li>نمونه‌گیری و آزمون فرضیه‌ها</li>
</ul>



<p>به‌عنوان مثال، الگوریتم معروف <strong>Naive Bayes</strong> کاملاً بر پایه قانون بیز ساخته شده است. درک مفاهیم احتمالی به شما کمک می‌کند تصمیمات مدل را تحلیل کرده و میزان اطمینان پیش‌بینی‌ها را بسنجید.</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://www.aparat.com/v/bkfws39" target="_blank" rel="noopener">شروع آموزش آمار و احتمال</a></div>
</div>



<p></p>



<h2 class="wp-block-heading">ابزار درک تغییرات و بهینه‌سازی</h2>



<p>ر مدل‌های یادگیری ماشین، هدف یافتن بهترین پارامترها برای کمینه‌کردن خطا است. این کار از طریق محاسبات مشتق و گرادیان انجام می‌شود.<br>مفاهیم مهم حسابان که باید بیاموزید عبارتند از:</p>



<ul class="wp-block-list">
<li>مشتق و گرادیان</li>



<li>گرادیان نزولی (Gradient Descent)</li>



<li>حد، پیوستگی و توابع چندمتغیره</li>



<li>بهینه‌سازی توابع هزینه</li>
</ul>



<p>هر بار که مدل شما در حال آموزش است، در واقع دارد با استفاده از حسابان، مسیر کم‌خطا‌ترین پاسخ را پیدا می‌کند.</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://www.aparat.com/v/r195hm2" target="_blank" rel="noopener">شروع آموزش مشتق</a></div>
</div>



<p>اگر تا به حال از خود پرسیده‌اید «مشتق دقیقاً یعنی چه؟» و چرا در <strong>یادگیری ماشین</strong> این‌قدر مهم است، پاسخ ساده است: مشتق یعنی <strong>نرخ تغییر</strong>.<br>در واقع مشتق به ما می‌گوید وقتی یک مقدار کمی تغییر می‌کند، مقدار دیگر با چه سرعتی تغییر پیدا می‌کند.</p>



<p>در دنیای <strong>یادگیری ماشین</strong>، ما همیشه در حال کمینه‌کردن خطا هستیم. برای مثال، فرض کنید مدل شما در پیش‌بینی قیمت خانه کمی اشتباه دارد. شما می‌خواهید بدانید اگر وزن یا پارامتری را تغییر دهید، خطا چقدر کم یا زیاد می‌شود. این دقیقاً همان کاری است که مشتق انجام می‌دهد!</p>



<p>فرمول پایه مشتق به زبان ساده این است: f′(x)=dxdf(x)​</p>



<p>یعنی: چقدر تابع f(x)f(x)f(x) نسبت به تغییرات xxx حساس است.</p>



<p>در الگوریتم‌های <strong>یادگیری ماشین</strong> مانند شبکه‌های عصبی، گرادیان (مشتق چندمتغیره) برای به‌روزرسانی وزن‌ها استفاده می‌شود. هر بار که مدل آموزش می‌بیند، گرادیان‌ها حساب می‌شوند تا خطا کمتر شود — فرایندی که به آن <strong>Gradient Descent</strong> یا <strong>نزول گرادیان</strong> گفته می‌شود.</p>



<p>با تمرین ساده روی توابع x2x^2&#215;2، sin(x)sin(x)sin(x)، یا exe^xex، به‌راحتی می‌توانید مفهوم مشتق را درک کرده و ارتباط آن با آموزش مدل‌های یادگیری ماشین را ببینید.</p>



<h2 class="wp-block-heading">برای یادگیری مؤثر ریاضیات در زمینه یادگیری ماشین، این مسیر آموزشی توصیه می‌شود:</h2>



<ol class="wp-block-list">
<li><strong>جبر خطی مقدماتی تا پیشرفته</strong>
<ul class="wp-block-list">
<li>منابع: کتاب “Linear Algebra Done Right”</li>
</ul>
</li>



<li><strong>آمار و احتمال کاربردی</strong>
<ul class="wp-block-list">
<li>منابع: Khan Academy، Coursera</li>
</ul>
</li>



<li><strong>حسابان و بهینه‌سازی</strong>
<ul class="wp-block-list">
<li>منابع: Calculus by Stewart، MIT OpenCourseWare</li>
</ul>
</li>



<li><strong>نظریه اطلاعات و مبانی ریاضی یادگیری ماشین</strong>
<ul class="wp-block-list">
<li>منابع: “Information Theory, Inference and Learning Algorithms”</li>
</ul>
</li>



<li><strong>تمرین عملی در یادگیری ماشین با پایتون و کتابخانه‌هایی مثل NumPy، Pandas و TensorFlow</strong></li>
</ol>



<h2 class="wp-block-heading">نظریه اطلاعات — پایه درک یادگیری ماشین در هوش مصنوعی</h2>



<p>در مدل‌های هوش مصنوعی، اطلاعات نقش کلیدی دارد. نظریه اطلاعات (Information Theory) به ما می‌آموزد که چگونه داده‌ها را به‌صورت کارآمد و مؤثر نمایش دهیم.<br>مفاهیم مهم این حوزه شامل:</p>



<ul class="wp-block-list">
<li>آنتروپی (Entropy)</li>



<li>کدگذاری شانون</li>



<li>Information Gain</li>



<li>Cross-Entropy Loss</li>
</ul>



<p>درک این مفاهیم باعث می‌شود عملکرد مدل‌های یادگیری ماشین در تشخیص الگوها و تصمیم‌گیری‌های پیچیده را بهتر درک کنید.</p>



<h2 class="wp-block-heading">نتیجه‌گیری — ریاضی، ستون فقرات یادگیری ماشین و آینده شغلی شما</h2>



<p>اگر هدف شما ورود به دنیای هوش مصنوعی است، <strong>یادگیری ریاضی برای یادگیری ماشین</strong> تنها یک مرحله نیست، بلکه پایه‌ای است برای همه‌ی مراحل پیشرفت شما.<br>دانشجویانی که این مفاهیم را درک می‌کنند، نه‌تنها می‌توانند الگوریتم‌ها را به‌درستی تحلیل کنند، بلکه درک عمیق‌تری از چگونگی کار مدل‌های هوش مصنوعی خواهند داشت.</p>



<p>#پیش‌نیازهای یادگیری ماشین</p>



<p></p>

    <div class="xs_social_share_widget xs_share_url after_content 		main_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content">

		
        <ul>
			        </ul>
    </div> 
]]></content:encoded>
					
					<wfw:commentRss>https://piero.ir/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%db%8c%d8%a7%d8%b6%db%8c-%d8%a8%d8%b1%d8%a7%db%8c-%d9%87%d9%88%d8%b4-%d9%85%d8%b5%d9%86%d9%88%d8%b9%db%8c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>آموزش داکر Docker &#8211; شروع کار</title>
		<link>https://piero.ir/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%af%d8%a7%da%a9%d8%b1-docker-%d8%b4%d8%b1%d9%88%d8%b9-%da%a9%d8%a7%d8%b1/</link>
		
		<dc:creator><![CDATA[پیروز جنابی]]></dc:creator>
		<pubDate>Fri, 26 Sep 2025 00:32:35 +0000</pubDate>
				<category><![CDATA[دسته‌بندی نشده]]></category>
		<guid isPermaLink="false">https://www.piero.ir/?p=4182</guid>

					<description><![CDATA[آموزش کامل Docker: از صفر تا دیپلوی حرفه‌ای داکر چیست و چرا مهم است؟ Docker پلتفرمی برای ساخت، بسته‌بندی و اجرای اپلیکیشن‌ها در قالب کانتینر است. کانتینرها سبک، سریع و قابل‌انتقال‌اند و مشکل «روی سیستم من کار می‌کند!» را حل می‌کنند. مزایا: سرعت راه‌اندازی، تکرارپذیری، مقیاس‌پذیری، سازگاری محیط توسعه و تولید، هزینه کمتر نسبت به [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>آموزش کامل Docker: از صفر تا دیپلوی حرفه‌ای</h1>
<h2>داکر چیست و چرا مهم است؟</h2>
<p>Docker پلتفرمی برای ساخت، بسته‌بندی و اجرای اپلیکیشن‌ها در قالب <strong>کانتینر</strong> است. کانتینرها سبک، سریع و قابل‌انتقال‌اند و مشکل «روی سیستم من کار می‌کند!» را حل می‌کنند.</p>
<ul>
<li><strong>مزایا:</strong> سرعت راه‌اندازی، تکرارپذیری، مقیاس‌پذیری، سازگاری محیط توسعه و تولید، هزینه کمتر نسبت به VMها.</li>
</ul>
<h2>مفاهیم کلیدی</h2>
<ul>
<li><strong>Image (ایمیج):</strong> قالب فقط‌خواندنی که شامل اپ و وابستگی‌هاست.</li>
<li><strong>Container (کانتینر):</strong> نمونهٔ در حال اجرای ایمیج.</li>
<li><strong>Registry:</strong> مخزن ایمیج‌ها (مانند Docker Hub).</li>
<li><strong>Dockerfile:</strong> دستورالعمل ساخت ایمیج.</li>
<li><strong>Volume:</strong> ذخیره‌سازی پایدار داده‌ها خارج از لایهٔ کانتینر.</li>
<li><strong>Network:</strong> اتصال کانتینرها به هم و به بیرون.</li>
</ul>
<h2>نصب Docker روی لینوکس (Ubuntu/Debian)</h2>
<pre><code>sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER
</code></pre>
<p><strong>تست:</strong></p>
<pre><code>docker run --rm hello-world
</code></pre>
<h2>اولین تجربه: اجرای یک کانتینر</h2>
<pre><code>docker run -d --name web -p 80:80 nginx:alpine
docker logs -f web
docker ps
</code></pre>
<h2>مدیریت ایمیج و کانتینر</h2>
<pre><code>docker images
docker ps -a
docker stop web
docker start web
docker rm web
docker rmi nginx:alpine
docker system prune -af
</code></pre>
<h2>Volumes: ذخیره‌سازی پایدار</h2>
<pre><code>docker volume create web_data
docker run -d --name web -p 80:80 -v web_data:/usr/share/nginx/html nginx:alpine
</code></pre>
<h2>Networking: اتصال سرویس‌ها</h2>
<pre><code>docker network create app_net
docker run -d --name db --network app_net \
-e POSTGRES_PASSWORD=secret \
-e POSTGRES_DB=app postgres:16-alpine

docker run -d --name app --network app_net \
-e DATABASE_URL=postgres://postgres:secret@db:5432/app youruser/yourapp:latest
</code></pre>
<h2>Dockerfile: ساخت ایمیج سفارشی</h2>
<pre><code># مرحله ساخت
FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
# مرحله اجرا
FROM node:20-alpine
ENV NODE_ENV=production
WORKDIR /app
COPY --from=build /app /app
EXPOSE 3000
CMD ["node", "server.js"]
</code></pre>
<h2>Compose: مدیریت چند سرویس</h2>
<pre><code>services:
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: app
      POSTGRES_USER: app
      POSTGRES_PASSWORD: please-change
    volumes:
      - db_data:/var/lib/postgresql/data

  app:
    build: ./app
    environment:
      DATABASE_URL: postgres://app:please-change@db:5432/app
    depends_on:
      - db

  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      - app

volumes:
  db_data:
</code></pre>
<h2>سناریوهای آماده</h2>
<h3>استقرار n8n</h3>
<pre><code>services:
  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=n8n.example.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - GENERIC_TIMEZONE=Asia/Tehran
    volumes:
      - n8n_data:/home/node/.n8n
volumes:
  n8n_data:
</code></pre>
<h3>ربات تلگرام</h3>
<pre><code>services:
  bot:
    build: ./bot
    env_file:
      - .env
</code></pre>
<h3>وب‌سایت استاتیک</h3>
<pre><code>services:
  web:
    image: nginx:alpine
    ports: ["80:80"]
    volumes:
      - ./public:/usr/share/nginx/html:ro
</code></pre>
<h2>بهترین شیوه‌ها</h2>
<ul>
<li>استفاده از تصاویر سبک (Alpine)</li>
<li>Multi-stage build</li>
<li>اجرای کاربر غیر-ریشه</li>
<li>نسخه‌گذاری ایمیج‌ها</li>
<li>استفاده از متغیرهای محیطی و Secrets</li>
<li>مانیتورینگ و بکاپ ولوم‌ها</li>
</ul>
<h2>امنیت Docker</h2>
<ul>
<li>آپدیت منظم Docker و سیستم‌عامل</li>
<li>محدودیت منابع برای کانتینرها</li>
<li>فعال‌سازی AppArmor/SELinux</li>
<li>استفاده از Docker Content Trust</li>
</ul>
<h2>دیپلوی روی سرور (CI/CD)</h2>
<p>با GitHub Actions می‌توانید ایمیج بسازید، به رجیستری پوش کنید و روی سرور اجرا کنید.</p>
<h2>خطایابی سریع</h2>
<pre><code>docker ps -a
docker logs -f <name>
docker exec -it <name> sh
docker inspect <name>
docker compose logs -f
</code></pre>
<h2>پرسش‌های متداول</h2>
<ul>
<li><strong>فرق VM و کانتینر؟</strong> کانتینر سبک‌تر و سریع‌تر است چون کرنل میزبان را استفاده می‌کند.</li>
<li><strong>آیا داکر برای تولید مناسب است؟</strong> بله، با رعایت امنیت و مانیتورینگ.</li>
<li><strong>چه زمانی به Kubernetes برویم؟</strong> وقتی نیاز به مقیاس‌پذیری و چند سرور دارید.</li>
</ul>
<div class="xs_social_share_widget xs_share_url after_content 		main_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content">
<ul>
			        </ul>
</p></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>راه‌اندازی LAMP روی آرچ‌لینوکس با pacman در کمتر از ۱۰ دقیقه</title>
		<link>https://piero.ir/%d8%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-lamp/</link>
		
		<dc:creator><![CDATA[پیروز جنابی]]></dc:creator>
		<pubDate>Wed, 24 Sep 2025 12:41:19 +0000</pubDate>
				<category><![CDATA[برنامه های پی اچ پی]]></category>
		<guid isPermaLink="false">https://www.piero.ir/?p=4597</guid>

					<description><![CDATA[اگر تازه‌وارد آرچ‌لینوکس شده‌اید و می‌خواهید سریع یک سرور LAMP (Linux + Apache + MySQL + PHP) راه بیندازید، فقط چند دستور ساده پیش رویتان است. در ادامه همان‌طور که در ترمینال پیش می‌رویم، خروجی هر مرحله را هم می‌بینیم تا مطمئن شویم همه چیز درست است. ۱) به‌روزرسانی سیستم ابتدا بسته‌ها و پایگاه دادهٔ [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class="paragraph">اگر تازه‌وارد آرچ‌لینوکس شده‌اید و می‌خواهید سریع یک سرور LAMP (Linux + Apache + MySQL + PHP) راه بیندازید، فقط چند دستور ساده پیش رویتان است. در ادامه همان‌طور که در ترمینال پیش می‌رویم، خروجی هر مرحله را هم می‌بینیم تا مطمئن شویم همه چیز درست است.</div>
<hr />
<h3 class="">۱) به‌روزرسانی سیستم</h3>
<div class="paragraph">ابتدا بسته‌ها و پایگاه دادهٔ pacman را به‌روز کنید:</div>
<div class="segment-code markdown-code" data-v-7caec4f8="" data-v-fc0d0c5a="">
<header class="segment-code-header" data-v-7caec4f8="">
<div class="segment-code-header-content" data-v-7caec4f8=""><span class="segment-code-lang" data-v-7caec4f8="">bash</span></p>
<div class="simple-button size-medium" data-v-182d5fe2="" data-v-92afdd37="" data-v-7caec4f8=""><span class="" data-v-182d5fe2="">Copy</span></div>
</div>
</header>
<div class="syntax-highlighter dark segment-code-content" data-v-efb858b9="" data-v-7caec4f8="">
<pre class="language-bash" data-v-efb858b9=""><code class="language-bash"><span class="token function">sudo</span> pacman <span class="token parameter variable">-Syu</span></code></pre>
</div>
</div>
<div data-v-68a5707c=""></div>
<hr />
<h3>۲) نصب Apache</h3>
<div class="paragraph">بستهٔ apache را نصب و سرویس آن را فعال می‌کنیم:</div>
<div class="segment-code markdown-code" data-v-7caec4f8="" data-v-fc0d0c5a="">
<header class="segment-code-header" data-v-7caec4f8="">
<div class="segment-code-header-content" data-v-7caec4f8=""><span class="segment-code-lang" data-v-7caec4f8="">bash</span></p>
<div class="simple-button size-medium" data-v-182d5fe2="" data-v-92afdd37="" data-v-7caec4f8=""><span class="" data-v-182d5fe2="">Copy</span></div>
</div>
</header>
<div class="syntax-highlighter dark segment-code-content" data-v-efb858b9="" data-v-7caec4f8="">
<pre class="language-bash" data-v-efb858b9=""><code class="language-bash"><span class="token function">sudo</span> pacman <span class="token parameter variable">-S</span> apache
<span class="token function">sudo</span> systemctl <span class="token builtin class-name">enable</span> httpd
<span class="token function">sudo</span> systemctl restart httpd</code></pre>
</div>
</div>
<div data-v-68a5707c=""></div>
<div class="paragraph">وضعیت سرویس را بررسی می‌کنیم:</div>
<div class="segment-code markdown-code" data-v-7caec4f8="" data-v-fc0d0c5a="">
<header class="segment-code-header" data-v-7caec4f8="">
<div class="segment-code-header-content" data-v-7caec4f8=""><span class="segment-code-lang" data-v-7caec4f8="">bash</span></p>
<div class="simple-button size-medium" data-v-182d5fe2="" data-v-92afdd37="" data-v-7caec4f8=""><span data-v-182d5fe2="">Copy</span></div>
</div>
</header>
<div class="syntax-highlighter dark segment-code-content" data-v-efb858b9="" data-v-7caec4f8="">
<pre class="language-bash" data-v-efb858b9=""><code class="language-bash">systemctl status httpd</code></pre>
</div>
</div>
<div data-v-68a5707c=""></div>
<div class="paragraph">خروجی نمونه:</div>
<div class="segment-code markdown-code" data-v-7caec4f8="" data-v-fc0d0c5a="">
<header class="segment-code-header" data-v-7caec4f8="">
<div class="segment-code-header-content" data-v-7caec4f8="">
<div class="simple-button size-medium" data-v-182d5fe2="" data-v-92afdd37="" data-v-7caec4f8=""><span class="" data-v-182d5fe2="">Copy</span></div>
</div>
</header>
<div class="syntax-highlighter dark segment-code-content" data-v-efb858b9="" data-v-7caec4f8="">
<pre class="language-" data-v-efb858b9=""><code class="language-">● httpd.service - Apache Web Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
     Active: active (running) since Tue 2016-02-16 13:00:18 IST; 7s ago
   Main PID: 1067 (httpd)
      Tasks: 82
     Memory: 6.4M
     CGroup: /system.slice/httpd.service
             ├─1067 /usr/bin/httpd -k start -DFOREGROUND
             ├─1070 /usr/bin/httpd -k start -DFOREGROUND
             ├─1071 /usr/bin/httpd -k start -DFOREGROUND
             └─1072 /usr/bin/httpd -k start -DFOREGROUND</code></pre>
</div>
</div>
<div data-v-68a5707c=""></div>
<div class="paragraph">اگر <code class="segment-code-inline" data-v-7caec4f8="" data-v-fc0d0c5a="">active (running)</code> را دیدید، Apache آمادهٔ پاسخ‌گویی است.</div>
<hr />
<h3 class="">۳) نصب و راه‌اندازی MySQL</h3>
<div class="paragraph">بستهٔ MariaDB (فورک پیش‌فرض MySQL در آرچ) را نصب می‌کنیم:</div>
<div class="segment-code markdown-code" data-v-7caec4f8="" data-v-fc0d0c5a="">
<header class="segment-code-header" data-v-7caec4f8="">
<div class="segment-code-header-content" data-v-7caec4f8=""><span class="segment-code-lang" data-v-7caec4f8="">bash</span></p>
<div class="simple-button size-medium" data-v-182d5fe2="" data-v-92afdd37="" data-v-7caec4f8=""><span class="" data-v-182d5fe2="">Copy</span></div>
</div>
</header>
<div class="syntax-highlighter dark segment-code-content" data-v-efb858b9="" data-v-7caec4f8="">
<pre class="language-bash" data-v-efb858b9=""><code class="language-bash"><span class="token function">sudo</span> pacman <span class="token parameter variable">-S</span> mysql
<span class="token function">sudo</span> mysql_install_db <span class="token parameter variable">--user</span><span class="token operator">=</span>mysql <span class="token parameter variable">--basedir</span><span class="token operator">=</span>/usr <span class="token parameter variable">--datadir</span><span class="token operator">=</span>/var/lib/mysql
<span class="token function">sudo</span> systemctl <span class="token builtin class-name">enable</span> mysqld
<span class="token function">sudo</span> systemctl start mysqld</code></pre>
</div>
</div>
<div data-v-68a5707c=""></div>
<div class="paragraph">حالا اسکریپت امنیتی را اجرا کنید تا رمز عبور root تعیین و دسترسی‌های ناایمن حذف شود:</div>
<div class="segment-code markdown-code" data-v-7caec4f8="" data-v-fc0d0c5a="">
<header class="segment-code-header" data-v-7caec4f8="">
<div class="segment-code-header-content" data-v-7caec4f8=""><span class="segment-code-lang" data-v-7caec4f8="">bash</span></p>
<div class="simple-button size-medium" data-v-182d5fe2="" data-v-92afdd37="" data-v-7caec4f8=""><span class="" data-v-182d5fe2="">Copy</span></div>
</div>
</header>
<div class="syntax-highlighter dark segment-code-content" data-v-efb858b9="" data-v-7caec4f8="">
<pre class="language-bash" data-v-efb858b9=""><code class="language-bash"><span class="token function">sudo</span> mysql_secure_installation</code></pre>
</div>
</div>
<div data-v-68a5707c=""></div>
<hr />
<h3 class="">۴) نصب PHP و ماژول Apache</h3>
<div class="paragraph">بسته‌های لازم:</div>
<div class="segment-code markdown-code" data-v-7caec4f8="" data-v-fc0d0c5a="">
<header class="segment-code-header" data-v-7caec4f8="">
<div class="segment-code-header-content" data-v-7caec4f8=""><span class="segment-code-lang" data-v-7caec4f8="">bash</span></p>
<div class="simple-button size-medium" data-v-182d5fe2="" data-v-92afdd37="" data-v-7caec4f8=""><span class="" data-v-182d5fe2="">Copy</span></div>
</div>
</header>
<div class="syntax-highlighter dark segment-code-content" data-v-efb858b9="" data-v-7caec4f8="">
<pre class="language-bash" data-v-efb858b9=""><code class="language-bash"><span class="token function">sudo</span> pacman <span class="token parameter variable">-S</span> php php-apache</code></pre>
</div>
</div>
<div data-v-68a5707c=""></div>
<div class="paragraph">فایل تنظیمات Apache را ویرایش می‌کنیم تا ماژول PHP لود شود. خط زیر را به <code class="segment-code-inline" data-v-7caec4f8="" data-v-fc0d0c5a="">/etc/httpd/conf/httpd.conf</code> اضافه کنید:</div>
<div class="segment-code markdown-code" data-v-7caec4f8="" data-v-fc0d0c5a="">
<header class="segment-code-header" data-v-7caec4f8="">
<div class="segment-code-header-content" data-v-7caec4f8=""><span class="segment-code-lang" data-v-7caec4f8="">apache</span></p>
<div class="simple-button size-medium" data-v-182d5fe2="" data-v-92afdd37="" data-v-7caec4f8=""><span class="" data-v-182d5fe2="">Copy</span></div>
</div>
</header>
<div class="syntax-highlighter dark segment-code-content" data-v-efb858b9="" data-v-7caec4f8="">
<pre class="language-apache" data-v-efb858b9=""><code class="language-apache">LoadModule php_module modules/libphp.so
AddHandler php-script .php</code></pre>
</div>
</div>
<div data-v-68a5707c=""></div>
<div class="paragraph">سپس Apache را مجدداً ری‌استارت کنید:</div>
<div class="segment-code markdown-code" data-v-7caec4f8="" data-v-fc0d0c5a="">
<header class="segment-code-header" data-v-7caec4f8="">
<div class="segment-code-header-content" data-v-7caec4f8=""><span class="segment-code-lang" data-v-7caec4f8="">bash</span></p>
<div class="simple-button size-medium" data-v-182d5fe2="" data-v-92afdd37="" data-v-7caec4f8=""><span class="" data-v-182d5fe2="">Copy</span></div>
</div>
</header>
<div class="syntax-highlighter dark segment-code-content" data-v-efb858b9="" data-v-7caec4f8="">
<pre class="language-bash" data-v-efb858b9=""><code class="language-bash"><span class="token function">sudo</span> systemctl restart httpd</code></pre>
</div>
</div>
<div data-v-68a5707c=""></div>
<hr />
<h3 class="">۵) تست نهایی</h3>
<div class="paragraph">در دایرکتوری ریشهٔ وب (<code class="segment-code-inline" data-v-7caec4f8="" data-v-fc0d0c5a="">/srv/http/</code>) فایلی به نام <code class="segment-code-inline" data-v-7caec4f8="" data-v-fc0d0c5a="">test.php</code> بسازید:</div>
<div class="segment-code markdown-code" data-v-7caec4f8="" data-v-fc0d0c5a="">
<header class="segment-code-header" data-v-7caec4f8="">
<div class="segment-code-header-content" data-v-7caec4f8=""><span class="segment-code-lang" data-v-7caec4f8="">bash</span></p>
<div class="simple-button size-medium" data-v-182d5fe2="" data-v-92afdd37="" data-v-7caec4f8=""><span data-v-182d5fe2="">Copy</span></div>
</div>
</header>
<div class="syntax-highlighter dark segment-code-content" data-v-efb858b9="" data-v-7caec4f8="">
<pre class="language-bash" data-v-efb858b9=""><code class="language-bash"><span class="token function">sudo</span> <span class="token function">nano</span> /srv/http/test.php</code></pre>
</div>
</div>
<div data-v-68a5707c=""></div>
<div class="paragraph">محتوای فایل:</div>
<div class="segment-code markdown-code" data-v-7caec4f8="" data-v-fc0d0c5a="">
<header class="segment-code-header" data-v-7caec4f8="">
<div class="segment-code-header-content" data-v-7caec4f8=""><span class="segment-code-lang" data-v-7caec4f8="">php</span></p>
<div class="simple-button size-medium" data-v-182d5fe2="" data-v-92afdd37="" data-v-7caec4f8=""><span class="" data-v-182d5fe2="">Copy</span></div>
</div>
</header>
<div class="syntax-highlighter dark segment-code-content" data-v-efb858b9="" data-v-7caec4f8="">
<pre class="language-php" data-v-efb858b9=""><code class="language-php"><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
<span class="token function">phpinfo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token delimiter important">?&gt;</span></span></code></pre>
</div>
</div>
<div data-v-68a5707c=""></div>
<div class="paragraph">حالا در مرورگر آدرس زیر را باز کنید (آی‌پی سرور یا <code class="segment-code-inline" data-v-7caec4f8="" data-v-fc0d0c5a="">localhost</code>):</div>
<p><code class="segment-code-inline markdown-code" data-v-7caec4f8="" data-v-fc0d0c5a="">http://localhost/test.php</code></p>
<div data-v-68a5707c=""></div>
<div class="paragraph">صفحهٔ اطلاعات PHP نمایش داده می‌شود؛ یعنی LAMP شما کاملاً آماده است.</div>
<div class="xs_social_share_widget xs_share_url after_content 		main_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content">
<ul>
			        </ul>
</p></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>آموزش کامل و حرفه‌ای React JSX &#124; مثال‌های کاربردی و نکات پیشرفته</title>
		<link>https://piero.ir/jsx/</link>
		
		<dc:creator><![CDATA[پیروز جنابی]]></dc:creator>
		<pubDate>Sun, 24 Sep 2017 14:57:29 +0000</pubDate>
				<category><![CDATA[آموزش reactJs]]></category>
		<category><![CDATA[دسته‌بندی نشده]]></category>
		<category><![CDATA[reactJs]]></category>
		<guid isPermaLink="false">http://www.piero.ir/?p=857</guid>

					<description><![CDATA[آموزش حرفه‌ای React JSX: از اصول تا الگوهای پیشرفته JSX یک سینتکس شبیه HTML است که داخل جاوااسکریپت استفاده می‌شود و به‌صورت Declarative رابط کاربری را توصیف می‌کند. این آموزش از مبانی تا تکنیک‌های حرفه‌ای (شرطی‌سازی، لیست‌ها و کلیدها، مدیریت state، هوک‌ها، پرفورمنس و الگوهای پیشرفته) را پوشش می‌دهد. ۱) JSX چیست و چرا؟ خوانایی [&#8230;]]]></description>
										<content:encoded><![CDATA[<div dir="rtl">
<h1>آموزش حرفه‌ای React JSX: از اصول تا الگوهای پیشرفته</h1>
<p>JSX یک سینتکس شبیه HTML است که داخل جاوااسکریپت استفاده می‌شود و به‌صورت <em>Declarative</em> رابط کاربری را توصیف می‌کند. این آموزش از مبانی تا تکنیک‌های حرفه‌ای (شرطی‌سازی، لیست‌ها و کلیدها، مدیریت state، هوک‌ها، پرفورمنس و الگوهای پیشرفته) را پوشش می‌دهد.</p>
<hr />
<h2>۱) JSX چیست و چرا؟</h2>
<ul>
<li>خوانایی بالا و نزدیکی به ساختار UI</li>
<li>اسکوپ و منطق جاوااسکریپت در کنار View</li>
<li>بهینه‌سازی هوشمند توسط React و ابزارهای ساخت</li>
</ul>
<h3>قواعد JSX</h3>
<ul>
<li>کامپوننت‌ها باید <strong>یک ریشه</strong> داشته باشند (از &lt;div&gt; یا &lt;React.Fragment&gt; استفاده کنید).</li>
<li>به‌جای <code>class</code> از <code>className</code> استفاده کنید.</li>
<li>استایل inline به‌صورت آبجکت جاوااسکریپت است (camelCase).</li>
<li>عبارت‌های JS را داخل <code>{}</code> قرار دهید.</li>
</ul>
<pre><pre class="brush: jscript; title: ; notranslate">// یک کامپوننت ساده
function Hello() {
const name = &quot;Piero&quot;;
return (
&amp;amp;lt;div className=&quot;box&quot;&amp;amp;gt;
&amp;amp;lt;h2&amp;amp;gt;سلام، {name}!&amp;amp;lt;/h2&amp;amp;gt;
&amp;amp;lt;/div&amp;amp;gt;
);
}</pre>
<hr />
<h2>۲) درج متغیرها و عبارات در JSX</h2>
<p>هر عبارت جاوااسکریپت را می‌توانید با آکولاد در JSX بنویسید.</p>
<pre><pre class="brush: jscript; title: ; notranslate">const price = 129_000;
const user = { firstName: &quot;Sara&quot;, lastName: &quot;Karimi&quot; };

export default function Card() {
return (
&amp;amp;lt;section&amp;amp;gt;

مبلغ: {price.toLocaleString(&quot;fa-IR&quot;)}

نام: {${user.firstName} ${user.lastName}}
{price &amp;amp;gt; 100000 ? &amp;amp;lt;strong&amp;amp;gt;پیشنهاد ویژه!&amp;amp;lt;/strong&amp;amp;gt; : null}
&amp;amp;lt;/section&amp;amp;gt;
);
}</pre>
<hr />
<h2>۳) شرطی‌سازی در JSX</h2>
<p>از عملگر سه‌تایی، AND منطقی یا جداسازی منطق قبل از return استفاده کنید.</p>
<pre><pre class="brush: jscript; title: ; notranslate">// 1) سه‌تایی
{isLoading ? &amp;amp;lt;Spinner /&amp;amp;gt; : &amp;amp;lt;DataList /&amp;amp;gt;}

// 2) AND منطقی (برای نمایش شرطی کوتاه)
{error &amp;amp;amp;&amp;amp;amp; 
خطا: {error.message}
}

// 3) جداسازی منطق
let content;
if (isLoading) content = &amp;amp;lt;Spinner /&amp;amp;gt;;
else if (error) content = &amp;amp;lt;ErrorView /&amp;amp;gt;;
else content = &amp;amp;lt;DataList /&amp;amp;gt;;
return &amp;amp;lt;div&amp;amp;gt;{content}&amp;amp;lt;/div&amp;amp;gt;;</pre>
<hr />
<h2>۴) رندر لیست‌ها و کلیدها (keys)</h2>
<p>برای عملکرد و جلوگیری از باگ در Diff، به هر آیتم یک <code>key</code> یکتا بدهید (از id پایدار استفاده کنید).</p>
<pre><pre class="brush: jscript; title: ; notranslate">const items = &#x5B;
{ id: &quot;a1&quot;, title: &quot;React&quot; },
{ id: &quot;b2&quot;, title: &quot;JSX&quot; },
{ id: &quot;c3&quot;, title: &quot;Hooks&quot; },
];

function List() {
return (
&amp;amp;lt;ul&amp;amp;gt;
{items.map(item =&amp;amp;gt; (
&amp;amp;lt;li key={item.id}&amp;amp;gt;{item.title}&amp;amp;lt;/li&amp;amp;gt;
))}
&amp;amp;lt;/ul&amp;amp;gt;
);
}</pre>
<hr />
<h2>۵) پراپس‌ها، State و رویدادها</h2>
<h3>پراپس‌ها</h3>
<pre><pre class="brush: jscript; title: ; notranslate">function Button({ children, onClick, type = &quot;button&quot; }) { return &amp;amp;lt;button type={type} onClick={onClick}&amp;amp;gt;{children}&amp;amp;lt;/button&amp;amp;gt;; }

// استفاده
&amp;amp;lt;Button onClick={() =&amp;amp;gt; alert(&quot;clicked!&quot;)}&amp;amp;gt;کلیک&amp;amp;lt;/Button&amp;amp;gt;</pre>
<h3>State و رویدادها با Hooks</h3>
<pre><pre class="brush: jscript; title: ; notranslate">import { useState } from &quot;react&quot;;

function Counter() {
const &#x5B;count, setCount] = useState(0);
return (
&amp;amp;lt;div&amp;amp;gt;

شمارنده: {count}
&amp;amp;lt;button onClick={() =&amp;amp;gt; setCount((c) =&amp;amp;gt; c + 1)}&amp;amp;gt;افزایش&amp;amp;lt;/button&amp;amp;gt;
&amp;amp;lt;/div&amp;amp;gt;
);
}</pre>
<h3>کنترل فرم (Controlled Components)</h3>
<pre><pre class="brush: jscript; title: ; notranslate">import { useState } from &quot;react&quot;;

function LoginForm() {
const &#x5B;email, setEmail] = useState(&quot;&quot;);

const submit = (e) =&amp;amp;gt; {
e.preventDefault();
console.log({ email });
};

return (
&amp;amp;lt;form onSubmit={submit}&amp;amp;gt;
&amp;amp;lt;input
value={email}
onChange={(e) =&amp;amp;gt; setEmail(e.target.value)}
placeholder=&quot;ایمیل&quot;
/&amp;amp;gt;
&amp;amp;lt;button&amp;amp;gt;ارسال&amp;amp;lt;/button&amp;amp;gt;
&amp;amp;lt;/form&amp;amp;gt;
);
}</pre>
<hr />
<h2>۶) Fragment، Portal و Context</h2>
<h3>Fragment</h3>
<pre><pre class="brush: jscript; title: ; notranslate">return ( &amp;amp;lt;&amp;amp;gt; &amp;amp;lt;Header /&amp;amp;gt; &amp;amp;lt;Main /&amp;amp;gt; &amp;amp;lt;/&amp;amp;gt; );</pre>
<h3>Portal (رندر خارج از سلسله‌مراتب معمول)</h3>
<pre><pre class="brush: jscript; title: ; notranslate">import { createPortal } from &quot;react-dom&quot;;

function Modal({ children }) {
return createPortal(
&amp;amp;lt;div className=&quot;backdrop&quot;&amp;amp;gt;{children}&amp;amp;lt;/div&amp;amp;gt;,
document.getElementById(&quot;modal-root&quot;)
);
}</pre>
<h3>Context (مدیریت وضعیت سراسری سبک)</h3>
<pre><pre class="brush: jscript; title: ; notranslate">import { createContext, useContext } from &quot;react&quot;;

const ThemeContext = createContext(&quot;light&quot;);

function App() {
return (
&amp;amp;lt;ThemeContext.Provider value=&quot;dark&quot;&amp;amp;gt;
&amp;amp;lt;Toolbar /&amp;amp;gt;
&amp;amp;lt;/ThemeContext.Provider&amp;amp;gt;
);
}

function Toolbar() {
const theme = useContext(ThemeContext);
return &amp;amp;lt;div data-theme={theme}&amp;amp;gt;Toolbar&amp;amp;lt;/div&amp;amp;gt;;
}</pre>
<hr />
<h2>۷) الگوهای حرفه‌ای با Hooks</h2>
<h3>بهینه‌سازی پرفورمنس: memo, useMemo, useCallback</h3>
<pre><pre class="brush: jscript; title: ; notranslate">import React, { useMemo, useCallback } from &quot;react&quot;;

const Expensive = React.memo(function Expensive({ value }) {
console.log(&quot;render&quot;);
return &amp;amp;lt;div&amp;amp;gt;محاسبه: {value}&amp;amp;lt;/div&amp;amp;gt;;
});

function Dashboard({ items }) {
const total = useMemo(() =&amp;amp;gt; items.reduce((s, x) =&amp;amp;gt; s + x, 0), &#x5B;items]);
const handleClick = useCallback(() =&amp;amp;gt; console.log(&quot;clicked&quot;), &#x5B;]);
return (
&amp;amp;lt;div&amp;amp;gt;

جمع: {total}
&amp;amp;lt;button onClick={handleClick}&amp;amp;gt;لاگ&amp;amp;lt;/button&amp;amp;gt;
&amp;amp;lt;Expensive value={total} /&amp;amp;gt;
&amp;amp;lt;/div&amp;amp;gt;
);
}</pre>
<h3>کداسپلیتینگ با lazy و Suspense</h3>
<pre><pre class="brush: jscript; title: ; notranslate">import React from &quot;react&quot;;

const Chart = React.lazy(() =&amp;amp;gt; import(&quot;./Chart&quot;));

function Reports() {
return (
&amp;amp;lt;React.Suspense fallback={&amp;amp;lt;div&amp;amp;gt;در حال بارگذاری...&amp;amp;lt;/div&amp;amp;gt;}&amp;amp;gt;
&amp;amp;lt;Chart /&amp;amp;gt;
&amp;amp;lt;/React.Suspense&amp;amp;gt;
);
}</pre>
<h3>Error Boundary</h3>
<pre><pre class="brush: jscript; title: ; notranslate">import React from &quot;react&quot;;

class ErrorBoundary extends React.Component {
state = { hasError: false };
static getDerivedStateFromError() { return { hasError: true }; }
componentDidCatch(err, info) { console.error(err, info); }
render() {
return this.state.hasError ? &amp;amp;lt;h3&amp;amp;gt;خطایی رخ داد&amp;amp;lt;/h3&amp;amp;gt; : this.props.children;
}
}

export default ErrorBoundary;</pre>
<hr />
<h2>۸) الگوی «بالابردن State» و ترکیب‌پذیری</h2>
<pre><pre class="brush: jscript; title: ; notranslate">import { useState } from &quot;react&quot;;

function Parent() {
const &#x5B;value, setValue] = useState(&quot;&quot;);
return (
&amp;amp;lt;&amp;amp;gt;
&amp;amp;lt;Input value={value} onChange={setValue} /&amp;amp;gt;
&amp;amp;lt;Preview value={value} /&amp;amp;gt;
&amp;amp;lt;/&amp;amp;gt;
);
}

function Input({ value, onChange }) {
return &amp;amp;lt;input value={value} onChange={(e) =&amp;amp;gt; onChange(e.target.value)} /&amp;amp;gt;;
}

function Preview({ value }) {
return 
پیش‌نمایش: {value}
;
}</pre>
<hr />
<h2>۹) استایل‌دهی در JSX</h2>
<p>گزینه‌ها: CSS Module، Styled Components، Tailwind، یا استایل inline.</p>
<pre><pre class="brush: jscript; title: ; notranslate">// استایل inline

&amp;amp;lt;div style={{ padding: 12, borderRadius: 8 }} /&amp;amp;gt;

// CSS Module
import styles from &quot;./box.module.css&quot;;

&amp;amp;lt;div className={styles.box}&amp;amp;gt;Box&amp;amp;lt;/div&amp;amp;gt;</pre>
<hr />
<h2>۱۰) دسترسی‌پذیری (a11y) و SEO فرانت‌اند</h2>
<ul>
<li>استفاده از تگ‌های معنایی (&lt;main&gt;, &lt;nav&gt;, &lt;header&gt;)</li>
<li>مشخص‌کردن alt برای تصاویر</li>
<li>مدیریت فوکوس و نسبت کنتراست مناسب</li>
</ul>
<hr />
<h2>۱۱) تست کامپوننت‌ها</h2>
<pre><pre class="brush: jscript; title: ; notranslate">// React Testing Library import { render, screen } from &quot;@testing-library/react&quot;; import Button from &quot;./Button&quot;;

test(&quot;renders label&quot;, () =&amp;amp;gt; {
render(&amp;amp;lt;Button&amp;amp;gt;سلام&amp;amp;lt;/Button&amp;amp;gt;);
expect(screen.getByText(&quot;سلام&quot;)).toBeInTheDocument();
});</pre>
<hr />
<h2>۱۲) نمونهٔ اپ کوچک: فهرست کارها (Todo)</h2>
<pre><pre class="brush: jscript; title: ; notranslate">import { useState } from &quot;react&quot;;

export default function TodoApp() {
const &#x5B;items, setItems] = useState(&#x5B;]);
const &#x5B;text, setText] = useState(&quot;&quot;);

const add = () =&amp;amp;gt; {
if (!text.trim()) return;
setItems((prev) =&amp;amp;gt; &#x5B;...prev, { id: crypto.randomUUID(), text }]);
setText(&quot;&quot;);
};

const remove = (id) =&amp;amp;gt; setItems((prev) =&amp;amp;gt; prev.filter(i =&amp;amp;gt; i.id !== id));

return (
&amp;amp;lt;div className=&quot;todo&quot;&amp;amp;gt;
&amp;amp;lt;h2&amp;amp;gt;کارها&amp;amp;lt;/h2&amp;amp;gt;
&amp;amp;lt;input value={text} onChange={(e) =&amp;amp;gt; setText(e.target.value)} /&amp;amp;gt;
&amp;amp;lt;button onClick={add}&amp;amp;gt;افزودن&amp;amp;lt;/button&amp;amp;gt;
&amp;amp;lt;ul&amp;amp;gt;
{items.map(i =&amp;amp;gt; (
&amp;amp;lt;li key={i.id}&amp;amp;gt;
{i.text}
&amp;amp;lt;button onClick={() =&amp;amp;gt; remove(i.id)}&amp;amp;gt;حذف&amp;amp;lt;/button&amp;amp;gt;
&amp;amp;lt;/li&amp;amp;gt;
))}
&amp;amp;lt;/ul&amp;amp;gt;
&amp;amp;lt;/div&amp;amp;gt;
);
}</pre>
<hr />
<h2>۱۳) نکات حرفه‌ای برای پروژه‌های واقعی</h2>
<ul>
<li>ساختار پوشه‌ها بر اساس دامنه (Feature-Sliced) به‌جای تفکیک فایل‌محور.</li>
<li>TypeScript برای خودمستندسازی و ایمنی تایپی.</li>
<li>ESLint + Prettier برای یکپارچگی کد.</li>
<li>استفاده از React Query / SWR برای مدیریت سرور استیت.</li>
<li>Next.js برای SSR/SSG، بهبود SEO و رندر سمت سرور.</li>
</ul>
<hr />
<h2>پرسش‌های متداول (FAQ)</h2>
<p><strong>تفاوت JSX و HTML؟</strong> JSX یک سینتکس داخل جاوااسکریپت است؛ برخی ویژگی‌ها متفاوت‌اند (مثل className، onClick).<br />
<strong>آیا بدون Babel می‌توان JSX نوشت؟</strong> نه، JSX باید به جاوااسکریپت کامپایل شود (Vite/Next.js/CRA قدیمی).<br />
<strong>راه بهینه‌سازی سرعت رندر چیست؟</strong> کلیدهای پایدار، memo/useMemo/useCallback، تقسیم کد با lazy/Suspense و جلوگیری از رندرهای غیرضروری.</p>
<hr />
<h3></h3>
</div>
<div class="xs_social_share_widget xs_share_url after_content 		main_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content">
<ul>
			        </ul>
</p></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>آموزش  reactJS</title>
		<link>https://piero.ir/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%db%8c-%d8%a7%da%a9%d8%aa-react/</link>
		
		<dc:creator><![CDATA[پیروز جنابی]]></dc:creator>
		<pubDate>Sun, 24 Sep 2017 11:33:05 +0000</pubDate>
				<category><![CDATA[آموزش reactJs]]></category>
		<category><![CDATA[آموزش رایگان]]></category>
		<category><![CDATA[دسته‌بندی نشده]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jsx]]></category>
		<category><![CDATA[reactJs]]></category>
		<category><![CDATA[ری اکت]]></category>
		<guid isPermaLink="false">http://www.piero.ir/?p=781</guid>

					<description><![CDATA[به آموزش  reactJS  (ری اکت) قسمت اول خوش آمدید reactJS یک فریم ورک جاوا اسکریپت می باشد که توسط فیس بوک ساخته شده است . این فریم ورک از برترین فریم ورکهای جهان می باشد که دارای مزایای زیر می باشد. بسیار سریع : برنامه هایی که با این فریم ورک ساخته می شوند بسیار [&#8230;]]]></description>
										<content:encoded><![CDATA[<h3 style="text-align: justify;">به آموزش  reactJS  (ری اکت) قسمت اول خوش آمدید</h3>
<p style="text-align: justify;">reactJS یک فریم ورک جاوا اسکریپت می باشد که توسط فیس بوک ساخته شده است . این فریم ورک از برترین فریم ورکهای جهان می باشد که دارای مزایای زیر می باشد.</p>
<ol style="text-align: justify;">
<li><strong>بسیار سریع :</strong> برنامه هایی که با این فریم ورک ساخته می شوند بسیار سریع هستند زیرا reactJS بسیار بهینه ساخته شده است.</li>
<li><strong>بسیار ماژولار :</strong> در صورتی که شما بسیار برنامه ای بزرگ دارید شما می توانید با reactJS به قطعات کوچکتر تبدیل کنید .</li>
<li><strong>هماهنگ با داده های بزرگ :</strong> reactJS بسیار مناسب برای برناه هایی با داده های بالا است .</li>
<li><strong>انعطاف بالا :</strong> با reactJS هرکاری که شما فکر کنید می توان انجام داد .</li>
<li><strong>شهرت :</strong> وقتی شما تسلط بر این فریم ورک داشته باشید طبیعتا شرایط شما برای یافتن کار مناسب بسیار عالی می باشد .</li>
</ol>
<p style="text-align: justify;">لازم به ذکر است برای شروع نیاز است شما به زبان برنامه نویسی <strong>جاوا اسکریپت</strong>  مسلط باشید همچنین می بایست جاوا اسکریپت اکما اسکریپت ۶ را مسلط با شید که ما با استفاده از بابل آن را به نسخه های رایج مرور گرها تبدیل می کنیم . در لینکهای زیر شامل برترین منابع یادگیری جاوا اسکریپت است :</p>
<p dir="ltr" style="text-align: justify;"><a href="https://www.codecademy.com/learn/javascript" target="_blank" rel="noopener">https://www.codecademy.com/learn/javascript</a></p>
<p dir="ltr" style="text-align: justify;"><a href="https://www.w3schools.com/js/default.asp" target="_blank" rel="noopener">https://www.w3schools.com/js/default.asp</a></p>
<h2 style="text-align: justify;">شروع آموزش reactJS</h2>
<p style="text-align: justify;">به کد زیر توجه نمایید :</p>
<pre class="lang:default decode:true ">var h1 = &lt;h1&gt;Hello world&lt;/h1&gt;;</pre>
<p>&nbsp;</p>
<p style="text-align: justify;">در حالت عادی جاوا اسکریپت به این کد خطا می گیرد :</p>
<div class="panelNode panelNode-console contextUID=2">
<div class="logRow logRow-errorMessage ">
<div class=" " style="text-align: justify;">
<div class="logContent " dir="ltr">
<div class="errorTitle focusRow subLogRow "><span class="errorMessage " style="color: #ff0000;">The character encoding of the HTML document was not declared. The document will render with garbled text in some browser configurations if the document contains characters from outside the US-ASCII range. The character encoding of the page must be declared in the document or in the transfer protocol.</span></div>
</div>
</div>
<div class="logContent " dir="rtl" style="text-align: justify;">به این ساختار <em>JSX</em> می گویند در ادامه به این مبحث به طور کامل می پردازیم.</div>
<h1 class="logContent " dir="rtl" style="text-align: justify;"><em>JSX</em></h1>
<p style="text-align: justify;">JSX یک المنت است که تعریف می شود و می توان هر مقدار دلخواهی را درون آن قرار داد  مانند اعداد ، رشته ، HTML  ، شی ، آرایه و &#8230;</p>
<p style="text-align: justify;">در واقع شما با jsx می توانید یک متغیر تعریف کنید و آن متغیر را به یک المنت html تبدیل کنید و در مواقع لزوم از آن استفاده کنید .</p>
<pre class="lang:default decode:true ">var navBar = &lt;nav&gt;I am a nav bar&lt;/nav&gt;;</pre>
<p>&nbsp;</p>
<p style="text-align: justify;">ذخیره شدن المنتهای HTML در JSX</p>
<pre class="lang:default decode:true ">var Pistons2004 = {
  center:        &lt;li&gt;Ben Wallace&lt;/li&gt;,
  powerForward:  &lt;li&gt;Rasheed Wallace&lt;/li&gt;,
  smallForward:  &lt;li&gt;Tayshaun Prince&lt;/li&gt;,
  shootingGuard: &lt;li&gt;Richard Hamilton&lt;/li&gt;,
  pointGuard:    &lt;li&gt;Chauncey Billups&lt;/li&gt;
};</pre>
<p>&nbsp;</p>
<p style="text-align: justify;">المنتهای jsx می نوانند دارای ویژگی باشند همانند html</p>
<p style="text-align: justify;">و همانند html هم مقدار دهی می شوند .</p>
<pre dir="ltr" class="">&lt;a href="http://www.yahoo.com"&gt;Welcome to the Yahoo&lt;/a&gt;;
var title = &lt;h1 id="title"&gt;Introduction to React.js: Part I&lt;/h1&gt;;</pre>
<p style="text-align: justify;">همچنین می توانند تو در تو باشند و برای خوانایی بیشتر از فاصله ها یا رفتن به خط بعد استفاده کرد.</p>
<pre class="lang:default decode:true ">&lt;a href="https://www.google.net"&gt; &lt;h1&gt; Click me I am Goooogle &lt;/h1&gt; &lt;/a&gt;</pre>
<p>&nbsp;</p>
<p dir="rtl" style="text-align: justify;"><strong>ولی توجه کنید برای رفتن به خط بعد حتما باید کد ما در پرانتز قرار بگیرد:</strong></p>
<pre dir="ltr" class="">var theGoogle = (
   &lt;a href="https://www.google.net"&gt;
     &lt;h1&gt;
       Click me I am Gooooooooooogle
     &lt;/h1&gt;
   &lt;/a&gt;
 );</pre>
<p style="text-align: justify;">نکته مهم : شما فقط می توانید یک المنت پایه داشته باشید :</p>
<pre dir="ltr" class="">var paragraphs = (
  &lt;div id="i-am-the-outermost-element"&gt;
    &lt;p&gt;I am a paragraph.&lt;/p&gt;
    &lt;p&gt;I, too, am a paragraph.&lt;/p&gt;
  &lt;/div&gt;
);</pre>
<p style="text-align: justify;">در حالی که مثال زیر خطا می دهد :(به دلیل اینکه  تگهای p دارای ریشه نمی باشند )</p>
<pre dir="ltr">var paragraphs = (
  &lt;p&gt;I am a paragraph.&lt;/p&gt;
  &lt;p&gt;I, too, am a paragraph.&lt;/p&gt;
);</pre>
<p style="text-align: justify;">برای رفع خطا بهتر است المتهایمان را درون یک &lt;div&gt; بگزاریم.(هر متغیر فقط می تواند یک تگ ریشه داشته باشد)</p>
<pre>var blog = ( &lt;div&gt; &lt;img src="pics/192940u73.jpg" /&gt;
&lt;h1&gt; Welcome to Dan's Blog! &lt;/h1&gt;
&lt;article&gt; Wow I had the tastiest sandwich today. I &lt;strong&gt;literally&lt;/strong&gt; almost freaked out. &lt;/article&gt; &lt;/div&gt; );</pre>
<h2 style="text-align: justify;">رندر کردن reactJS</h2>
<p style="text-align: justify;">حالا که به ساختار آن اشنا شدید بهتر است نحوه استفاده از react رایاد بگیرید .</p>
<pre class="lang:default decode:true">var React = require('react');
var ReactDOM = require('react-dom');
// Copy code here:
ReactDOM.render(&lt;h1&gt;Hello world&lt;/h1&gt;, document.getElementById('app'));</pre>
<p>&nbsp;</p>
<h4 style="text-align: justify;">خروجی : Hello world</h4>
<p style="text-align: justify;">نگران نباشید الان به طور کامل براتون این مورد را شرح می دهیم:</p>
<p style="text-align: justify;">در خط اول و دوم کتابخانه reactJS را فراخوانی کردیم.</p>
<p style="text-align: justify;"><code>ReactDOM</code> چیست ؟</p>
<p style="text-align: justify;">یک کتابخانه جاوا اسکریپت است که ویژگی های ری اکت را در خود جا داده است . البته در ادامه با این مفهوم به طور کامل آشنا می شویم ولی الان برمیگردیم به فایلمان همان گونه که می بینید تکه کد زیر خروجی مناسب می دهد :</p>
<pre class="lang:default decode:true ">ReactDOM.render(&lt;h1&gt;Hello world&lt;/h1&gt;, document.getElementById('app'));</pre>
<p>&nbsp;</p>
<p>ReactDOM.render تابعی است که نوع jsx را خروجی می دهد به المنت دوم تابع در واقع این تابع دو آرگومان ورودی دارد :</p>
<p>ارگومان اول متغیر jsx را دریافت و در المنت دوم چاپ می کند .</p>
<p><strong>توجه : شما می بایست در فایل html خود المنتی با ایدی app داشته باشید</strong></p>
<p dir="ltr">  &lt;main id=&#8221;app&#8221;&gt;&lt;/main&gt;</p>
<h2 dir="rtl">بارگزاری متغیر reactJs</h2>
<pre class="lang:default decode:true" dir="ltr">var React = require('react');
var ReactDOM = require('react-dom');

// Write code here:
var myList=(&lt;ul&gt;
    &lt;li&gt;info@piero.ir&lt;/li&gt;
    &lt;li&gt;www.piero.ir &lt;/li&gt;
    &lt;/ul&gt;
    );
ReactDOM.render(myList,document.getElementById("app"));</pre>
<p>خروچی :</p>
<ul data-reactroot="">
<li>info@piero.ir</li>
<li>www.piero.ir</li>
</ul>
<p>همانگونه که دیدید متغیری تعریف نمودیم و در آن لیستی قرار دادیم و بعد آن را چاپ نمودیم.</p>
<p>نکته پایانی:</p>
<p>چون از المنت استفاده می کنیم درصورتی که یک کد دوبار نوشته شود دفعه دوم هیچ کاری انجام نمیدهد :</p>
<pre dir="ltr" class="">var hello = &lt;h1&gt;Hello world&lt;/h1&gt;;

// This will add "Hello world" to the screen:

ReactDOM.render(hello, document.getElementById('app'));

// This won't do anything at all:

ReactDOM.render(hello, document.getElementById('app'));</pre>
</div>
<p>لطفا با ارایه نظرتتان مارا در بهبود مطالب وب سایت یاری نمایید با تشکر</p>
<p>با تشکر پیروز جنابی</p>
</div>
<div class="xs_social_share_widget xs_share_url after_content 		main_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content">
<ul>
			        </ul>
</p></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>آموزش ssh</title>
		<link>https://piero.ir/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-ssh/</link>
		
		<dc:creator><![CDATA[پیروز جنابی]]></dc:creator>
		<pubDate>Tue, 12 Sep 2017 11:37:32 +0000</pubDate>
				<category><![CDATA[آموزش رایگان]]></category>
		<category><![CDATA[سایر آموزشها]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ssh]]></category>
		<guid isPermaLink="false">http://www.piero.ir/?p=1105</guid>

					<description><![CDATA[آموزش ssh ssh(Secure Shell) یک راه کنترل سرورهای لینوکس می باشد که به سادگی بدون دسترسی فیزیکی به سرور مورد نظر انجام می شود. در واقع شما با این پروتکل می توانید شل های لینوکس را در سرور راه دور خود اجرا نمایید. در اینجا از نرم افزار putty استفاده می کنیم که بسیار ساده [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2 dir="rtl">آموزش ssh</h2>
<p>ssh(Secure Shell) یک راه کنترل سرورهای لینوکس می باشد که به سادگی بدون دسترسی فیزیکی به سرور مورد نظر انجام می شود. در واقع شما با این پروتکل می توانید شل های لینوکس را در سرور راه دور خود اجرا نمایید. در اینجا از نرم افزار <strong>putty</strong> استفاده می کنیم که بسیار ساده و سبک می باشد .</p>
<p><a href="https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html" target="_blank" rel="noopener">دانلود putty</a></p>
<p>همچنین می توانید در سیستم عامل لینوکس خانواده ابونتو با دستور زیر اقدام به نصب آن نمایید .</p>
<p dir="ltr">sudo apt-get install putty</p>
<h3 dir="rtl">انصال PUTTY به SSH</h3>
<p>putty بسیار سبک و سریع می باشد و حدودا نیاز به نصب ندارد .</p>
<p>ابتدا آن را اجرا می نماییم و پنجره زیر را مشاهده می نماییم:</p>
<p><img fetchpriority="high" decoding="async" class="size-full wp-image-1106 aligncenter" src="http://www.piero.ir/wp-content/uploads/2017/09/piero.ir-putty.jpg" alt="" width="453" height="438" /></p>
<p>در قسمت Host Name نام هاست یا ای پی سرورمان را ثبت می کنیم و دکمه open را می زنیم . در صورتی که سوالی مبنی بر مطمین بودن شما پرسید بر روی yes می زنیم و به سیستم مورد نظر متصل می شویم و پنجره زیر را مشاهده می کنیم:</p>
<p><img decoding="async" class="alignnone size-full wp-image-1107" src="http://www.piero.ir/wp-content/uploads/2017/09/piero.ir-putty2.jpg" alt="" width="663" height="96" /></p>
<p>همانگونه که می بینید در پنجره فوق از ما نام کاربری و رمز عبور را می پرسد و بعد از وارد نمودن آنها وارد سیستم مورد نظر می شویم و می توانیم به راحتی از دستورات زیر استفاده نماییم.</p>
<p><strong>ls </strong>&#8211; لیست کردن فایل های موجود در یک مسیر<br />
<strong>cd </strong>&#8211; تغییر مسیر<br />
<strong>cp </strong>&#8211; کپی کردن فایل<br />
<strong>mv </strong>&#8211; انتقال یک فایل و یا تغییر نان آن<br />
<strong>rm </strong>&#8211; حذف یک فایل<br />
<strong>mkdir </strong>&#8211; ایجاد یک پوشه جدید:<br />
<strong>pwd </strong>&#8211; نمایش مسیری که در آن قرا دارید<br />
<strong>whoami </strong>&#8211; نمایش نام کاربری<br />
<strong>wget </strong>&#8211; دانلود آدرس اینترنتی در مسیر فعلی<br />
<strong>yum </strong>&#8211; مدیریت بسته برای نصب نرم افزار از مخازن</p>
<h2>فعال سازی ROOT در SSH</h2>
<p>همانگونه که می دانید کاربر <strong>root</strong> در <strong>ssh</strong> در <strong>ubuntu server</strong> در نسخه های جدید غیر فعال می باشد.<br />
برای فعال سازی کافی است طبق روال زیر عمل کنید .<br />
رفتن به حالت root از دستورات زیر استفاده می کنیم .</p>
<pre class="lang:default decode:true"> sudo -s
 su root</pre>
<p>&nbsp;</p>
<p>پس از اجرای دستورات بالا وضعیت فعالی شما در حالت root قرار میکیرد که می توانید پس از اجرای دستور زیر می توانید خروجی را مشاهده نمایید که شما در وضعیت روت قرار دارید</p>
<p dir="rtl">
<pre class="lang:default decode:true">id</pre>
<p dir="ltr">
uid=0(root) gid=0(root) groups=0(root)</p>
<p>اکنون رمز عبور را تغییر می دهیم:</p>
<pre class="lang:default decode:true"> passwd root</pre>
<p>رمز را وارد می نماییم<br />
پس از مشاهده<strong> password updated successfully</strong> می فهمیم رمز عبور با موفقیت تغییر کرده است</p>
<p>ولی هنوز امکان ورود با کاربر روت در ssh غیر فعال است که با استفاده از دستور زیر این امکان را فعال می کنیم</p>
<pre class="lang:default decode:true">sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config</pre>
<p>اکنون کارمان تمام شده و با دستور زیر به ssh وصل می شویم</p>
<pre class="lang:default decode:true">ssh root@10.1.1.50</pre>
<div class="xs_social_share_widget xs_share_url after_content 		main_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content">
<ul>
			        </ul>
</p></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>مدیریت بانک اطلاعاتی در کدایگنایتر</title>
		<link>https://piero.ir/%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%a8%d8%a7%d9%86%da%a9-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7%d8%aa%db%8c-%d8%af%d8%b1-%da%a9%d8%af%d8%a7%db%8c%da%af%d9%86%d8%a7%db%8c%d8%aa%d8%b1/</link>
		
		<dc:creator><![CDATA[پیروز جنابی]]></dc:creator>
		<pubDate>Wed, 02 Aug 2017 08:38:24 +0000</pubDate>
				<category><![CDATA[آموزش رایگان]]></category>
		<category><![CDATA[آموزش کد ایگنایتر]]></category>
		<category><![CDATA[codeegniter]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[codeigniter db forge]]></category>
		<category><![CDATA[dbforge]]></category>
		<category><![CDATA[آموزش php]]></category>
		<guid isPermaLink="false">http://www.piero.ir/?p=1093</guid>

					<description><![CDATA[مدیریت بانک اطلاعاتی در کد ایگنایتر  شامل ساخت و مدیریت جداول پایگاه داده می باشد . این عملیاتها به صورت جامع  و راحت در کد ایگنایتر فراهم شده است . فقط کافی است کتابخانه dbforge را در load کنید و از متدهای آن برای ساخت جداول پایگاه داده استفاده نمایید. نحوه بارگزاری dbforge codeigniter $this-&#62;load-&#62;dbforge(); [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>مدیریت بانک اطلاعاتی در کد ایگنایتر </strong> شامل ساخت و مدیریت جداول پایگاه داده می باشد . این عملیاتها به صورت جامع  و راحت در کد ایگنایتر فراهم شده است . فقط کافی است کتابخانه <strong>dbforge</strong> را در load کنید و از متدهای آن برای ساخت جداول پایگاه داده استفاده نمایید.</p>
<h3>نحوه بارگزاری dbforge codeigniter</h3>
<pre class="">$this-&gt;load-&gt;dbforge();</pre>
<p>در کد بالا کتابخانه مربوطه را بارگزاری نموده ایم.</p>
<p>و همانگونه که می دانید نحوه استفاده از متدهای کتابخانه ها در کد ایگنایتر به شکل زیر می باشد.</p>
<pre class="lang:default decode:true">$this-&gt;dbforge-&gt;some_method();</pre>
<h2>ساخت بانک اطلاعاتی در کدایگنایتر</h2>
<p>با استفاده از دستور زیر می توانید یک بانک اطلاعاتی بسازید و درونش جداول را تعیین کنید البته این عملیات بستگی به مجوزهای شما هم دارد .</p>
<pre class="">$this-&gt;dbforge-&gt;create_database('my_db')</pre>
<p>توجه داشته باشید این دستور مقدار درست یا اشتباه بر می گرداند که می توان از آنها برای چک کردن صحت عملیات استفاده شود.</p>
<pre class="">$this-&gt;load-&gt;dbforge();
if ($this-&gt;dbforge-&gt;create_database('my_db'))
{
    echo 'Database created!';
}</pre>
<h2>حذف بانک اطلاعاتی در کدایگنایتر</h2>
<p>تمام روال دقیقا مثل ساخت یک بانک اطلاعاتی در کد ایگنایتر می باشد ولی با دستور drop_database</p>
<pre class="">$this-&gt;dbforge-&gt;drop_database('my_db')</pre>
<h2>ساخت و حذف جداول بانک اطلاعاتی در کدایگنایتر</h2>
<p>برای ساخت جداول در بانک اطلاعاتی نیاز است <strong>ابتدا فیلدها</strong> را تعریف کنیم و یعد کلیدها را تعریف کنیم که در ادامه به صورت کامل به همه موارد می پردازیم:</p>
<h4>ساخت فیلد ها در کد ایگنایتر</h4>
<p>به هر عنصر یک جدول یک فیلد می گوییم همانند نام خانوادگی در جدول مشخصات فرد می باشد . ساخت فیلدها در کدایگنایتر بسیار راحت می باشد فقط کافی است آرایه های تعریف کنیم و نوع آن را مشخص کنیم .مانند کد زیر:</p>
<pre class="lang:default decode:true ">$fields = array( 'users' =&gt; array( 'type' =&gt; 'VARCHAR', 'constraint' =&gt; '100', ), ); // will translate to "users VARCHAR(100)" when the field is added</pre>
<p>&nbsp;</p>
<p>متدهای فیلدها:</p>
<ul class="simple">
<li dir="ltr" style="text-align: left;">unsigned/true :  “UNSIGNED” مشخص کردن مقدار</li>
<li dir="ltr" style="text-align: left;">default/value : مقدار پش فرض</li>
<li dir="ltr" style="text-align: left;">null/true : برای مشخص کردن بتواند تهی باشد با خیر پیش فرض نمی تواند باشد</li>
<li dir="ltr" style="text-align: left;">auto_increment/true :به طور اتوماتیک عدد بگیرد</li>
<li dir="ltr" style="text-align: left;">unique/true : مقدار بدون تکرار باشد</li>
</ul>
<p>در مثال زیر می توانید یک نمونه خوب را مشاهده فرمایید:</p>
<pre class="lang:default decode:true">$fields = array(
        'blog_id' =&gt; array(
                'type' =&gt; 'INT',
                'constraint' =&gt; 5,
                'unsigned' =&gt; TRUE,
                'auto_increment' =&gt; TRUE
        ),
        'blog_title' =&gt; array(
                'type' =&gt; 'VARCHAR',
                'constraint' =&gt; '100',
                'unique' =&gt; TRUE,
        ),
        'blog_author' =&gt; array(
                'type' =&gt;'VARCHAR',
                'constraint' =&gt; '100',
                'default' =&gt; 'King of Town',
        ),
        'blog_description' =&gt; array(
                'type' =&gt; 'TEXT',
                'null' =&gt; TRUE,
        ),
);</pre>
<p>&nbsp;</p>
<p>بعد از تعریف فیلدها نوبت به رند کردن آن بوسیله دستور زیر می رسد</p>
<pre class="lang:default decode:true">$this-&gt;dbforge-&gt;add_field($fields);</pre>
<p>و بعد از آن می توانید جدول را بسازید : <tt class="docutils literal"><span class="pre">create_table()</span></tt></p>
<h4>ساختن فیلدها به صورت رشته ای در مدیریت بانک اطلاعاتی در کدایگنایتر</h4>
<p>بوسیله رشته ای هم می توان فیلدها را ساخت :</p>
<pre class="lang:default decode:true">$this-&gt;dbforge-&gt;add_field("label varchar(100) NOT NULL DEFAULT 'default label'");</pre>
<h3>افزودن کلید درمدیریت بانک اطلاعاتی در کدایگنایتر</h3>
<p>به منظور کلید اصلی در جدلول از کدهای زیر می توان استفاده کرد:</p>
<pre class="lang:default decode:true">$this-&gt;dbforge-&gt;add_key('blog_id', TRUE);
// gives PRIMARY KEY `blog_id` (`blog_id`)

$this-&gt;dbforge-&gt;add_key('blog_id', TRUE);
$this-&gt;dbforge-&gt;add_key('site_id', TRUE);
// gives PRIMARY KEY `blog_id_site_id` (`blog_id`, `site_id`)

$this-&gt;dbforge-&gt;add_key('blog_name');
// gives KEY `blog_name` (`blog_name`)

$this-&gt;dbforge-&gt;add_key(array('blog_name', 'blog_label'));
// gives KEY `blog_name_blog_label` (`blog_name`, `blog_label`)</pre>
<h2>ساخت جداول در مدیریت بانک اطلاعاتی در کدایگنایتر</h2>
<p>بعد از ساخت فیلدها باید با استفاده از کد زیر جدول را بوجود آورد :</p>
<pre class="lang:default decode:true">$this-&gt;dbforge-&gt;create_table('table_name');
// gives CREATE TABLE table_name</pre>
<p>&nbsp;</p>
<p>پارامتر دوم در صورتی که true تنظیم شود در صورتی که جدول موجود نباشد  می سازد</p>
<pre class="lang:default decode:true">$this-&gt;dbforge-&gt;create_table('table_name', TRUE);
// gives CREATE TABLE IF NOT EXISTS table_name</pre>
<p>&nbsp;</p>
<p>در پارامثر سوم یک سری ویژگی ها دریافت و اعمال می شود</p>
<pre class="lang:default decode:true">$attributes = array('ENGINE' =&gt; 'InnoDB');
$this-&gt;dbforge-&gt;create_table('table_name', FALSE, $attributes);
// produces: CREATE TABLE `table_name` (...) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci</pre>
<p>&nbsp;</p>
<h2>حذف جداول در بانک اطلاعاتی کد ایگنایتر در مدیریت بانک اطلاعاتی در کدایگنایتر</h2>
<p>با استفاده از کد زیر می توانید جدلول را حذف نمایید:</p>
<pre class="lang:default decode:true">// Produces: DROP TABLE table_name
$this-&gt;dbforge-&gt;drop_table('table_name');

// Produces: DROP TABLE IF EXISTS table_name
$this-&gt;dbforge-&gt;drop_table('table_name',TRUE);</pre>
<p>پارامتر دوم در صورتی که true تنظیم شود در صورتی که جدول موجود نباشد  می سازد</p>
<h2>تغییرنام جداول</h2>
<pre class="lang:default decode:true">$this-&gt;dbforge-&gt;rename_table('old_table_name', 'new_table_name');
// gives ALTER TABLE old_table_name RENAME TO new_table_name</pre>
<p>&nbsp;</p>
<p>در پامتر اول نام جدول جاری و پارامتر دوم نام  جدید.</p>
<p>&nbsp;</p>
<h1>ویرایش جداول بانک اطلاعاتی در مدیریت بانک اطلاعاتی در کدایگنایتر</h1>
<p dir="rtl"> در مدیریت بانک اطلاعاتی در کدایگنایتر ویرایش اطلاعات همانند افزودن بسیار کاربردی و راحت می باشد:</p>
<h3 dir="rtl">افزودن فیلد به جداول بانک اطلاعاتی</h3>
<p dir="rtl">برای افزودن فیلد به جدول جاری از متد <tt class="docutils literal"><span class="pre">add_column()</span></tt> استفاده میکنیم :</p>
<pre class="lang:default decode:true">$fields = array(
        'preferences' =&gt; array('type' =&gt; 'TEXT')
);
$this-&gt;dbforge-&gt;add_column('table_name', $fields);
// Executes: ALTER TABLE table_name ADD preferences TEXT</pre>
<p dir="rtl">در پارامتر اول نام جدول و در پارامتر دوم آرایه ای از فیلدها را دریافت می کند.</p>
<h3 dir="rtl">حذف فیلدها از جداول</h3>
<pre class="lang:default decode:true">$this-&gt;dbforge-&gt;drop_column('table_name', 'column_to_drop');</pre>
<p>پارامتر اول نام جدول و پارامتر دوم نام فیلد به منظور حذف.</p>
<h3>ویرایش فیلدهای جداول</h3>
<p>برای ویرایش فیلدها همانند اقزودن فیلدها رفتار می کنیم .</p>
<pre class="lang:default decode:true">$fields = array(
        'old_name' =&gt; array(
                'name' =&gt; 'new_name',
                'type' =&gt; 'TEXT',
        ),
);
$this-&gt;dbforge-&gt;modify_column('table_name', $fields);
// gives ALTER TABLE table_name CHANGE old_name new_name TEXT</pre>
<p>منبع : <a href="https://www.codeigniter.com/user_guide/database/forge.htm" target="_blank" rel="noopener">https://www.codeigniter.com/user_guide/database/forge.htm</a>l</p>
<p>&nbsp;</p>
<div class="xs_social_share_widget xs_share_url after_content 		main_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content">
<ul>
			        </ul>
</p></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>کدایگنایتر درphpstrom</title>
		<link>https://piero.ir/%da%a9%d8%af%d8%a7%db%8c%da%af%d9%86%d8%a7%db%8c%d8%aa%d8%b1-%d8%af%d8%b1phpstrom/</link>
		
		<dc:creator><![CDATA[پیروز جنابی]]></dc:creator>
		<pubDate>Sun, 23 Jul 2017 12:01:07 +0000</pubDate>
				<category><![CDATA[دسته‌بندی نشده]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[phpstrom]]></category>
		<guid isPermaLink="false">http://www.piero.ir/?p=1088</guid>

					<description><![CDATA[نحوه پشتیبانی phpstrome در کدایگنایتر همانگونه که می دانیم phpstrom قوی ترین محیط برنامه نویسی php می باشد و کدایگنایتر یکی از قوی ترین و محبوب ترین فریم ورکهای php می باشد که به صورت پیش فرض قسمت تکمیل کد آن  در phpstrom پشتیبانی نمی شود .در واقع قسمتی که هنگام نوشتن کدها در phpstrom [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>نحوه پشتیبانی phpstrome در کدایگنایتر</h1>
<p>همانگونه که می دانیم phpstrom قوی ترین محیط برنامه نویسی php می باشد و کدایگنایتر یکی از قوی ترین و محبوب ترین فریم ورکهای php می باشد که به صورت پیش فرض قسمت تکمیل کد آن  در phpstrom پشتیبانی نمی شود .در واقع قسمتی که هنگام نوشتن کدها در phpstrom باعث می شود که ادامه کدها به ما پیشنهاد شود .</p>
<p>با مراحل زیر به راحتی می توانیم این قابلیت را به phpstrom خود بیفزارییم.</p>
<ol>
<li>فایلی به نام <strong>phpstorm.php</strong> در شاخه اصلی برنامه بسازید و محتوای زیر را در آن بگزارید.(در کنار index.php)</li>
<li>به پوشه <em>system/core/</em> رفته و بروی Controller.php و Model.php کلیک راست کرده و گزینه set <em>Mark as Plain Text</em> را بزنید.</li>
</ol>
<p>اکنون تنظیمات شما به اتمام رسیده است و همانگونه که در تصویر زیر می بینید متدها به راحتی به شما پیشنهاد داده می شود.</p>
<p><strong>تصویر دمو :</strong></p>
<p><img decoding="async" class="aligncenter" src="https://raw.githubusercontent.com/natanfelles/codeigniter-phpstorm/master/codeigniter-phpstorm.png" /></p>
<p><strong>فایل phpstorm.php :</strong></p>
<pre class="lang:default decode:true ">&lt;?php
die('This file is used for development purposes only.');
/**
 * PhpStorm Code Completion to CodeIgniter + HMVC
 *
 * @package       CodeIgniter
 * @subpackage    PhpStorm
 * @category      Code Completion
 * @version       3.1.4
 * @author        Natan Felles
 * @link          http://github.com/natanfelles/codeigniter-phpstorm
 */
/*
 * To enable code completion to your own libraries add a line above each class as follows:
 *
 * @property Library_name       $library_name                        Library description
 *
 */
/**
 * @property CI_Benchmark        $benchmark                           This class enables you to mark points and calculate the time difference between them. Memory consumption can also be displayed.
 * @property CI_Calendar         $calendar                            This class enables the creation of calendars
 * @property CI_Cache            $cache                               Caching Class
 * @property CI_Cart             $cart                                Shopping Cart Class
 * @property CI_Config           $config                              This class contains functions that enable config files to be managed
 * @property CI_Controller       $controller                          This class object is the super class that every library in CodeIgniter will be assigned to
 * @property CI_DB_forge         $dbforge                             Database Forge Class
 * @property CI_DB_mysql_driver|CI_DB_query_builder $db                                  This is the platform-independent base Query Builder implementation class
 * @property CI_DB_utility       $dbutil                              Database Utility Class
 * @property CI_Driver_Library   $driver                              Driver Library Class
 * @property CI_Email            $email                               Permits email to be sent using Mail, Sendmail, or SMTP
 * @property CI_Encrypt          $encrypt                             Provides two-way keyed encoding using Mcrypt
 * @property CI_Encryption       $encryption                          Provides two-way keyed encryption via PHP's MCrypt and/or OpenSSL extensions
 * @property CI_Exceptions       $exceptions                          Exceptions Class
 * @property CI_Form_validation  $form_validation                     Form Validation Class
 * @property CI_FTP              $ftp                                 FTP Class
 * @property CI_Hooks            $hooks                               Provides a mechanism to extend the base system without hacking
 * @property CI_Image_lib        $image_lib                           Image Manipulation class
 * @property CI_Input            $input                               Pre-processes global input data for security
 * @property CI_Javascript       $javascript                          Javascript Class
 * @property CI_Jquery           $jquery                              Jquery Class
 * @property CI_Lang             $lang                                Language Class
 * @property CI_Loader           $load                                Loads framework components
 * @property CI_Log              $log                                 Logging Class
 * @property CI_Migration        $migration                           All migrations should implement this, forces up() and down() and gives access to the CI super-global
 * @property CI_Model            $model                               CodeIgniter Model Class
 * @property CI_Output           $output                              Responsible for sending final output to the browser
 * @property CI_Pagination       $pagination                          Pagination Class
 * @property CI_Parser           $parser                              Parser Class
 * @property CI_Profiler         $profiler                            This class enables you to display benchmark, query, and other data in order to help with debugging and optimization.
 * @property CI_Router           $router                              Parses URIs and determines routing
 * @property CI_Security         $security                            Security Class
 * @property CI_Session          $session                             Session Class
 * @property CI_Table            $table                               Lets you create tables manually or from database result objects, or arrays
 * @property CI_Trackback        $trackback                           Trackback Sending/Receiving Class
 * @property CI_Typography       $typography                          Typography Class
 * @property CI_Unit_test        $unit                                Simple testing class
 * @property CI_Upload           $upload                              File Uploading Class
 * @property CI_URI              $uri                                 Parses URIs and determines routing
 * @property CI_User_agent       $agent                               Identifies the platform, browser, robot, or mobile device of the browsing agent
 * @property CI_Xmlrpc           $xmlrpc                              XML-RPC request handler class
 * @property CI_Xmlrpcs          $xmlrpcs                             XML-RPC server class
 * @property CI_Zip              $zip                                 Zip Compression Class
 * @property CI_Utf8             $utf8                                Provides support for UTF-8 environments
 * @property Ispconfig           $ispconfig                           This class enables you to use the ISPConfig 3 Remote API
 * @property Boleto              $boleto                              Boleto Class
 */
class CI_Controller {
	public function __construct()
	{
	}
}
/**
 * @property CI_Benchmark        $benchmark                           This class enables you to mark points and calculate the time difference between them. Memory consumption can also be displayed.
 * @property CI_Calendar         $calendar                            This class enables the creation of calendars
 * @property CI_Cache            $cache                               Caching Class
 * @property CI_Cart             $cart                                Shopping Cart Class
 * @property CI_Config           $config                              This class contains functions that enable config files to be managed
 * @property CI_Controller       $controller                          This class object is the super class that every library in CodeIgniter will be assigned to
 * @property CI_DB_forge         $dbforge                             Database Forge Class
 * @property CI_DB_mysql_driver|CI_DB_query_builder $db                                  This is the platform-independent base Query Builder implementation class
 * @property CI_DB_utility       $dbutil                              Database Utility Class
 * @property CI_Driver_Library   $driver                              Driver Library Class
 * @property CI_Email            $email                               Permits email to be sent using Mail, Sendmail, or SMTP
 * @property CI_Encrypt          $encrypt                             Provides two-way keyed encoding using Mcrypt
 * @property CI_Encryption       $encryption                          Provides two-way keyed encryption via PHP's MCrypt and/or OpenSSL extensions
 * @property CI_Exceptions       $exceptions                          Exceptions Class
 * @property CI_Form_validation  $form_validation                     Form Validation Class
 * @property CI_FTP              $ftp                                 FTP Class
 * @property CI_Hooks            $hooks                               Provides a mechanism to extend the base system without hacking
 * @property CI_Image_lib        $image_lib                           Image Manipulation class
 * @property CI_Input            $input                               Pre-processes global input data for security
 * @property CI_Javascript       $javascript                          Javascript Class
 * @property CI_Jquery           $jquery                              Jquery Class
 * @property CI_Lang             $lang                                Language Class
 * @property CI_Loader           $load                                Loads framework components
 * @property CI_Log              $log                                 Logging Class
 * @property CI_Migration        $migration                           All migrations should implement this, forces up() and down() and gives access to the CI super-global
 * @property CI_Model            $model                               CodeIgniter Model Class
 * @property CI_Output           $output                              Responsible for sending final output to the browser
 * @property CI_Pagination       $pagination                          Pagination Class
 * @property CI_Parser           $parser                              Parser Class
 * @property CI_Profiler         $profiler                            This class enables you to display benchmark, query, and other data in order to help with debugging and optimization.
 * @property CI_Router           $router                              Parses URIs and determines routing
 * @property CI_Security         $security                            Security Class
 * @property CI_Session          $session                             Session Class
 * @property CI_Table            $table                               Lets you create tables manually or from database result objects, or arrays
 * @property CI_Trackback        $trackback                           Trackback Sending/Receiving Class
 * @property CI_Typography       $typography                          Typography Class
 * @property CI_Unit_test        $unit                                Simple testing class
 * @property CI_Upload           $upload                              File Uploading Class
 * @property CI_URI              $uri                                 Parses URIs and determines routing
 * @property CI_User_agent       $agent                               Identifies the platform, browser, robot, or mobile device of the browsing agent
 * @property CI_Xmlrpc           $xmlrpc                              XML-RPC request handler class
 * @property CI_Xmlrpcs          $xmlrpcs                             XML-RPC server class
 * @property CI_Zip              $zip                                 Zip Compression Class
 * @property CI_Utf8             $utf8                                Provides support for UTF-8 environments
 */
class CI_Model {
	public function __construct()
	{
	}
}
/**
 * @property CI_Benchmark        $benchmark                           This class enables you to mark points and calculate the time difference between them. Memory consumption can also be displayed.
 * @property CI_Calendar         $calendar                            This class enables the creation of calendars
 * @property CI_Cache            $cache                               Caching Class
 * @property CI_Cart             $cart                                Shopping Cart Class
 * @property CI_Config           $config                              This class contains functions that enable config files to be managed
 * @property CI_Controller       $controller                          This class object is the super class that every library in CodeIgniter will be assigned to
 * @property CI_DB_forge         $dbforge                             Database Forge Class
 * @property CI_DB_mysql_driver|CI_DB_query_builder $db                                  This is the platform-independent base Query Builder implementation class
 * @property CI_DB_utility       $dbutil                              Database Utility Class
 * @property CI_Driver_Library   $driver                              Driver Library Class
 * @property CI_Email            $email                               Permits email to be sent using Mail, Sendmail, or SMTP
 * @property CI_Encrypt          $encrypt                             Provides two-way keyed encoding using Mcrypt
 * @property CI_Encryption       $encryption                          Provides two-way keyed encryption via PHP's MCrypt and/or OpenSSL extensions
 * @property CI_Exceptions       $exceptions                          Exceptions Class
 * @property CI_Form_validation  $form_validation                     Form Validation Class
 * @property CI_FTP              $ftp                                 FTP Class
 * @property CI_Hooks            $hooks                               Provides a mechanism to extend the base system without hacking
 * @property CI_Image_lib        $image_lib                           Image Manipulation class
 * @property CI_Input            $input                               Pre-processes global input data for security
 * @property CI_Javascript       $javascript                          Javascript Class
 * @property CI_Jquery           $jquery                              Jquery Class
 * @property CI_Lang             $lang                                Language Class
 * @property CI_Loader           $load                                Loads framework components
 * @property CI_Log              $log                                 Logging Class
 * @property CI_Migration        $migration                           All migrations should implement this, forces up() and down() and gives access to the CI super-global
 * @property CI_Model            $model                               CodeIgniter Model Class
 * @property CI_Output           $output                              Responsible for sending final output to the browser
 * @property CI_Pagination       $pagination                          Pagination Class
 * @property CI_Parser           $parser                              Parser Class
 * @property CI_Profiler         $profiler                            This class enables you to display benchmark, query, and other data in order to help with debugging and optimization.
 * @property CI_Router           $router                              Parses URIs and determines routing
 * @property CI_Security         $security                            Security Class
 * @property CI_Session          $session                             Session Class
 * @property CI_Table            $table                               Lets you create tables manually or from database result objects, or arrays
 * @property CI_Trackback        $trackback                           Trackback Sending/Receiving Class
 * @property CI_Typography       $typography                          Typography Class
 * @property CI_Unit_test        $unit                                Simple testing class
 * @property CI_Upload           $upload                              File Uploading Class
 * @property CI_URI              $uri                                 Parses URIs and determines routing
 * @property CI_User_agent       $agent                               Identifies the platform, browser, robot, or mobile device of the browsing agent
 * @property CI_Xmlrpc           $xmlrpc                              XML-RPC request handler class
 * @property CI_Xmlrpcs          $xmlrpcs                             XML-RPC server class
 * @property CI_Zip              $zip                                 Zip Compression Class
 * @property CI_Utf8             $utf8                                Provides support for UTF-8 environments
 */
class MX_Controller {
	public function __construct()
	{
	}
}</pre>
<p><strong>منبع :</strong></p>
<p><a href="https://github.com/natanfelles/codeigniter-phpstorm" target="_blank" rel="noopener">https://github.com/natanfelles/codeigniter-phpstorm</a></p>
<p>&nbsp;</p>
<div class="xs_social_share_widget xs_share_url after_content 		main_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content">
<ul>
			        </ul>
</p></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>نصب Linux  Nginx  MySQL  PHP بر روی لینوکس</title>
		<link>https://piero.ir/%d9%86%d8%b5%d8%a8-linux-nginx-mysql-php-%d8%a8%d8%b1-%d8%b1%d9%88%db%8c-%d9%84%db%8c%d9%86%d9%88%da%a9%d8%b3/</link>
		
		<dc:creator><![CDATA[پیروز جنابی]]></dc:creator>
		<pubDate>Mon, 10 Jul 2017 12:52:59 +0000</pubDate>
				<category><![CDATA[آموزش پی اچ پی]]></category>
		<category><![CDATA[آموزش رایگان]]></category>
		<category><![CDATA[دسته‌بندی نشده]]></category>
		<category><![CDATA[سایر آموزشها]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[php7]]></category>
		<category><![CDATA[نصب nginx]]></category>
		<category><![CDATA[نصب nginx بروی لینوکس]]></category>
		<guid isPermaLink="false">http://www.piero.ir/?p=1083</guid>

					<description><![CDATA[انجین ایکس ( Nginx ) یکی از وب سرور هایی است که بسیاری از مدیران سایت های پربازدید را به سوی خود جلب نموده است. انجین ایکس علاوه بر وب سرور، ریورس پراکسی سرور ( reverse proxy server ) و میل پراکسی سرور ( mail proxy server ) نیز می باشد که  بصورت متن باز ( open [&#8230;]]]></description>
										<content:encoded><![CDATA[<div dir="rtl">انجین ایکس ( Nginx ) یکی از وب سرور هایی است که بسیاری از مدیران سایت های پربازدید را به سوی خود جلب نموده است. انجین ایکس علاوه بر وب سرور، ریورس پراکسی سرور ( reverse proxy server ) و میل پراکسی سرور ( mail proxy server ) نیز می باشد که  بصورت متن باز ( open source ) ارائه شده است و از پروتکل های http , https , SMTP , POP3 و IMAP پشتیبانی می کند. انجین ایکس به گونه ای طراحی شده است که همزمان با پشتیبانی از تعداد کانکشن های بسیار بالا ، عملکرد مناسب و مصرف کم رم را به همراه داشته باشد. این وب سرور محبوب بر روی سیستم عامل های مختلفی از جمله لینوکس ، mac os و سولاریس قابل نصب می باشد. nginx توسط ایگور سیسویو ( igor sysoev ) ساخته شده است، ایگور در سال ۱۹۷۰ در شهر آلماتی قزاقستان به دنیا آمده است و فارغ التحصیل دانشگاه ایالتی مسکو می باشد.</div>
<p dir="rtl">کار ساخت nginx از سال ۲۰۰۲ آغاز گردید و اولین نسخه آن در سال ۲۰۰۴ منتشر گردید. در حال حاضر نزدیک به ۱۲ درصد وب سایت های جهان یعنی چیزی در حدود ۲۲ میلیون وب سایت از nginx به عنوان وب سرور خود استفاده می کنند.</p>
<p dir="rtl"><strong>چگونه وب سرور Nginx را بر روی سرور لینوکس خود نصب نمائیم؟</strong></p>
<p dir="rtl">در این آموزش به نصب LEMP بروی سرورهای ابونتو با استفاده از دستور apt می پردازیم .</p>
<h1 dir="rtl">گام اول :نصب NGINX</h1>
<p>برای شروع ترمینال خود را باز کرده و دستورات زیر را تایپ می کنیم .</p>
<pre class="lang:default decode:true ">    sudo apt-get update
    sudo apt-get install nginx
</pre>
<p>در صورتی که firewall ufw استفاده می کنید کد زیر را بزنید</p>
<pre class="lang:default decode:true ">sudo ufw allow 'Nginx HTTP'</pre>
<p>با کذ زیر می توانید ازufw خود مطلع شوید</p>
<pre class="lang:default decode:true ">sudo ufw status</pre>
<p>خروجی باید به شرح زیر باشد</p>
<pre class="lang:default decode:true ">Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)</pre>
<p>&nbsp;</p>
<p>درصورتی که در حال حاضر سرور apache را نصب کرده اید با کد زیر آن را stop کنید و سرویس ngnix را اجرا کنید :</p>
<pre class="lang:default decode:true ">service apache2 stop
service ngnix start</pre>
<p>در کد اول آپاچی متوقف می شود و در کد دوم ngnix شروع به کار می کند .</p>
<p><strong>در صورتی که ngnix با موفقیت نصب شده باشد با زدن <a href="http://localhost" target="_blank" rel="noopener">http://localhost</a> درون مرور گر صفحه زیر نشان داده میشود</strong> :</p>
<p><img decoding="async" src="https://assets.digitalocean.com/articles/lemp_ubuntu_1604/nginx_default.png" /></p>
<p>&nbsp;</p>
<h1>نصب بانک اطلاعاتی</h1>
<p>به منظور نصب mysql از کد زیر استفاده می نماییم :</p>
<pre class="lang:default decode:true ">sudo apt-get install mysql-server</pre>
<p>ولی پیشنهاد می شود بانک اطلاعاتی maria db را نصب نمایید که در مقاله زیر به طور کامل به آن پرداخته ایم :</p>
<p>[irp posts=&#8221;620&#8243; name=&#8221;مهاجرت از Mysql به MariaDb&#8221;]</p>
<p>&nbsp;</p>
<h1>نصب php</h1>
<p>به طور کلی برای سازگاری php و nginx می بایست <code>php-fpm</code> را نصب نمود و در کل روال عادی نصب php را داریم :</p>
<pre class="lang:default decode:true ">sudo apt-get install php-fpm php-mysql</pre>
<p>قطعه کد بالا php را نصب نموده و تنظیمات مورد نظر جهت استفاده nginx را انجام می دهد.</p>
<h2>تنظیمات php برای nginx</h2>
<p>با کد زیر وارد تنظیمات <code>php-fpm</code> برای تنظیم php برروی سرورهای nginx می شویم :</p>
<pre class="lang:default decode:true">sudo nano /etc/php/7.0/fpm/php.ini</pre>
<p>در فایل مربوطه به دنبال گزینه cgi.fix_pathinfo می گردیم که در حالت پیش فرض به صورت زیر است:</p>
<pre class="lang:default decode:true">;cgi.fix_pathinfo=1</pre>
<p>به منظور تصحیح عملکرد ; را از ابتدا برداشته و مقدارش را برابر ۰ قرار می دهیم:</p>
<pre class="lang:default decode:true ">cgi.fix_pathinfo=0</pre>
<p>حالا کافی است php را با کد زیر  ریست نماییم :</p>
<pre class="lang:default decode:true ">sudo systemctl restart php7.0-fpm</pre>
<p>در صورتی که کد بالا جواب نداد از کد زیر برای ریست php استفاده نمایید :</p>
<pre class="lang:default decode:true ">service  php7.1-fpm restart</pre>
<h1>ساخت فایل تنظیمات NGINX</h1>
<p>امنون فقط یک گام مانده تا به lemp برسیم کافی است دستور زیر را بزنیم :</p>
<pre class="lang:default decode:true ">sudo nano /etc/nginx/sites-available/default</pre>
<p>این فایل حاوی تنظیمات پیش فرض nginx است بهتر است به مقدار زیر تغییرش دهیم:</p>
<pre class="lang:default decode:true ">server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name server_domain_or_IP;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}
</pre>
<p>فایل بالا تنظیمات مناسب جهت استفاده php از nginx  می باشد .</p>
<p>بعد از اتمام تغییر فایل را بسته و نمظیمات را با کد زیر تست نمایید :</p>
<pre class="lang:default decode:true ">sudo nginx -t</pre>
<p>در صورتی که خطایی مشاهده نشد کد زیر را در برای بارگزاری دوباره nginx بزنید :</p>
<pre class="lang:default decode:true ">sudo systemctl reload nginx</pre>
<p>یا :</p>
<pre class="lang:default decode:true ">service  nginx restart
</pre>
<p>&nbsp;</p>
<p>تبریک نصب شما با موفقیت انجام شده و شما می توانید با ساختن فایل php.info و قرار دادن تابع phpinfo() مطابق کد زیر سرور خود را تست نمایید :</p>
<pre class="lang:default decode:true ">&lt;?php
phpinfo();</pre>
<p><img decoding="async" src="https://assets.digitalocean.com/articles/lemp_ubuntu_1604/php_info.png" /></p>
<p>با تشکر &#8211; پیروز جنابی</p>
<div class="xs_social_share_widget xs_share_url after_content 		main_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content">
<ul>
			        </ul>
</p></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>بارگزاری فایل (File Uploading) در کد ایگنایتر</title>
		<link>https://piero.ir/%d8%a8%d8%a7%d8%b1%da%af%d8%b2%d8%a7%d8%b1%db%8c-%d9%81%d8%a7%db%8c%d9%84-file-uploading-%d8%af%d8%b1-%da%a9%d8%af-%d8%a7%db%8c%da%af%d9%86%d8%a7%db%8c%d8%aa%d8%b1/</link>
		
		<dc:creator><![CDATA[پیروز جنابی]]></dc:creator>
		<pubDate>Mon, 30 Jan 2017 15:02:25 +0000</pubDate>
				<category><![CDATA[آموزش رایگان]]></category>
		<category><![CDATA[آموزش کد ایگنایتر]]></category>
		<guid isPermaLink="false">http://www.piero.ir/?p=709</guid>

					<description><![CDATA[بارگزاری فایل (File Uploading) در کد ایگنایتر بارگزاری فایل (File Uploading) در کد ایگنایتر شامل روند کلی زیر است: یک فرم جهت انتخاب فایل . مشخص کردن جای ذخیره فایل . اعتبار سنجی فایل در راه . آپلود شدن و نشان دادن پیغام موفقیت . ما طبق یک مثال کاربردی این چهار مورد را به [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>بارگزاری فایل (File Uploading) در کد ایگنایتر</h2>
<p><span id="result_box" class="short_text" lang="fa">بارگزاری فایل (File Uploading) در کد ایگنایتر شامل روند کلی <span class="">زیر است:</span></span></p>
<ol>
<li>یک فرم جهت انتخاب فایل .</li>
<li>مشخص کردن جای ذخیره فایل .</li>
<li>اعتبار سنجی فایل در راه .</li>
<li>آپلود شدن و نشان دادن پیغام موفقیت .</li>
</ol>
<p>ما طبق یک مثال کاربردی این چهار مورد را به صورت کامل شرح می دهیم .</p>
<p><strong>توجه</strong> : بهتر است برای این کار , کار با فرمها را در کد ایگنایتر کار کرده باشید .</p>
<h2>فرم نمایش بارگزاری فایل (File Uploading) در کد ایگنایتر</h2>
<p>با استفاده از ویرایشگرتان در آدرس <strong>application/views/</strong>  یک فایل متنی به نام <strong>upload_form.php</strong> بسازید .</p>
<pre class="lang:default decode:true">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Upload Form&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;?php echo $error;?&gt;

&lt;?php echo form_open_multipart('upload/do_upload');?&gt;

&lt;input type="file" name="userfile" size="20" /&gt;

&lt;br /&gt;&lt;br /&gt;

&lt;input type="submit" value="upload" /&gt;

&lt;/form&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>ساخت صفحه پیغام موفقیت در بارگزاری فایل (File Uploading) در کد ایگنایتر</h2>
<p>با استفاده از ویرایشگرتان در آدرس <strong>application/views/</strong>  یک فایل متنی به نام <strong>upload_success.php</strong> بسازید .</p>
<pre class="lang:default decode:true ">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Upload Form&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;h3&gt;Your file was successfully uploaded!&lt;/h3&gt;

&lt;ul&gt;
&lt;?php foreach ($upload_data as $item =&gt; $value):?&gt;
&lt;li&gt;&lt;?php echo $item;?&gt;: &lt;?php echo $value;?&gt;&lt;/li&gt;
&lt;?php endforeach; ?&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;?php echo anchor('upload', 'Upload Another File!'); ?&gt;&lt;/p&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>ساخت کنترلر در بارگزاری فایل (File Uploading) در کد ایگنایتر</h2>
<p>با استفاده از ویرایشگرتان در آدرس <strong>application/controllers/</strong> یک فایل متنی به نام <strong>Upload.php</strong> بسازید .</p>
<pre class="lang:default decode:true ">&lt;?php

class Upload extends CI_Controller {

        public function __construct()
        {
                parent::__construct();
                $this-&gt;load-&gt;helper(array('form', 'url'));
        }

        public function index()
        {
                $this-&gt;load-&gt;view('upload_form', array('error' =&gt; ' ' ));
        }

        public function do_upload()
        {
                $config['upload_path']          = './uploads/';
                $config['allowed_types']        = 'gif|jpg|png';
                $config['max_size']             = 100;
                $config['max_width']            = 1024;
                $config['max_height']           = 768;

                $this-&gt;load-&gt;library('upload', $config);

                if ( ! $this-&gt;upload-&gt;do_upload('userfile'))
                {
                        $error = array('error' =&gt; $this-&gt;upload-&gt;display_errors());

                        $this-&gt;load-&gt;view('upload_form', $error);
                }
                else
                {
                        $data = array('upload_data' =&gt; $this-&gt;upload-&gt;data());

                        $this-&gt;load-&gt;view('upload_success', $data);
                }
        }
}
?&gt;</pre>
<p>&nbsp;</p>
<h2>شرح کنترلر</h2>
<p>در ابتدای فایل کنترلر کتابخانه های form و url را در سازنده کلاس بارگزاری می نماییم بنا براین در ادامه نیازی برای صدا زدن آنها نمی باشد.</p>
<p>در ادامه در تابع index  صفحه upload_form را بارگزاری می نماییم .</p>
<p>در تابع do_upload  اقدامات زیر را انجام می دهیم :</p>
<ol>
<li>ابتدا با استفاده از آرایه $config  کتابخانه آپلود را مقدار دهی می نماییم .(در ادامه تمامی تنظیمات جهت مقدار دهی کتابخانه را شرح می دهیم)</li>
<li>کتابخانه را با استفاده از تنظیمات مشخص شده صدا می زنیم</li>
<li>در شرطمان (if) فایل را بارگزاری می نماییم ودر صورت موفق بودن کاربر را به صفحه بارگزاری موفق به فایل (upload_success )هدایت می نماییم .و در صورتی که موفقیت آمیز نبود خطا را دریافت و به فایل فرم بارگزاری ارسال می کنیم .</li>
</ol>
<h2></h2>
<h2>پوشه بارگزاری فایل</h2>
<p>شما نیاز دارید به ساخت پوشه uploads در شاخه اصلی برنامه تان و دادن دسترسی کامل به آن جهت بارگزاری فایلها در آن .</p>
<p>&nbsp;</p>
<h2>اجرا</h2>
<p>کافی است آدرس زیر را در مرورگرتان فرا خوانی نمایید .</p>
<pre class="lang:default decode:true ">example.com/index.php/upload/</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>تنظیمات جهت بارگزاری فایل در کد ایگنایتر</h2>
<p>در جدول زیر تنظیماتی که باید به کتابخانه آپلود بفرستیم را نشان می دهیم این تنظیمات در واقع همان تنظیماتی می باشد که در آرایه $config بوده است.</p>
<p>&nbsp;</p>
<table class="docutils aligncenter" border="1">
<thead valign="bottom">
<tr class="row-odd" style="height: 36px;">
<th class="head" style="height: 36px; width: 170px;"><strong>نام تنظیم</strong></th>
<th class="head" style="height: 36px; width: 123.767px;"><strong>مقدار پیش فرض</strong></th>
<th class="head" style="height: 36px; width: 135.833px;"><strong>مقدار ها</strong></th>
<th class="head" style="height: 36px; width: 627.4px;"><strong>توضیح</strong></th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even" style="height: 18px;">
<td style="height: 18px; text-align: center; width: 170px;"><strong>upload_path</strong></td>
<td style="height: 18px; text-align: center; width: 123.767px;">None</td>
<td style="height: 18px; text-align: center; width: 135.833px;">None</td>
<td style="height: 18px; width: 627.4px;">مکان بارگزاری فایل</td>
</tr>
<tr class="row-odd" style="height: 18px;">
<td style="height: 18px; text-align: center; width: 170px;"><strong>allowed_types</strong></td>
<td style="height: 18px; text-align: center; width: 123.767px;">None</td>
<td style="height: 18px; text-align: center; width: 135.833px;">None</td>
<td style="height: 18px; width: 627.4px;">پسوندهای مجاز جهت بار گزاری فایل</td>
</tr>
<tr class="row-even" style="height: 18px;">
<td style="height: 18px; text-align: center; width: 170px;"><strong>file_name</strong></td>
<td style="height: 18px; text-align: center; width: 123.767px;">None</td>
<td style="height: 18px; text-align: center; width: 135.833px;">Desired file name</td>
<td style="height: 18px; width: 627.4px;">نام فایل</td>
</tr>
<tr class="row-odd" style="height: 36px;">
<td style="height: 36px; text-align: center; width: 170px;"><strong>file_ext_tolower</strong></td>
<td style="height: 36px; text-align: center; width: 123.767px;">FALSE</td>
<td style="height: 36px; text-align: center; width: 135.833px;">TRUE/FALSE (boolean)</td>
<td style="height: 36px; width: 627.4px;">در صورت درست بودن نام فایل به حروف کوچک می شود</td>
</tr>
<tr class="row-even" style="height: 36px;">
<td style="height: 36px; text-align: center; width: 170px;"><strong>overwrite</strong></td>
<td style="height: 36px; text-align: center; width: 123.767px;">FALSE</td>
<td style="height: 36px; text-align: center; width: 135.833px;">TRUE/FALSE (boolean)</td>
<td style="height: 36px; width: 627.4px;">در صورت درست بودن در صورتی که فایل وجود داشته باشد فایل جایگزین می شود</td>
</tr>
<tr class="row-odd" style="height: 36px;">
<td style="height: 36px; text-align: center; width: 170px;"><strong>max_size</strong></td>
<td style="height: 36px; text-align: center; width: 123.767px;">۰</td>
<td style="height: 36px; text-align: center; width: 135.833px;">None</td>
<td style="height: 36px; width: 627.4px;">حداکثر حجم جهت بار گزاری فایل به صورت پیش فرض از تنظیمات پی اچ پی شما می گیرد که به ۲ مگابایت می باشد</td>
</tr>
<tr class="row-even" style="height: 18px;">
<td style="height: 18px; text-align: center; width: 170px;"><strong>max_width</strong></td>
<td style="height: 18px; text-align: center; width: 123.767px;">۰</td>
<td style="height: 18px; text-align: center; width: 135.833px;">None</td>
<td style="height: 18px; width: 627.4px;">حداکثر عرض در صورتی که صفر تنظیم شود اندازه نامحدود می شود</td>
</tr>
<tr class="row-odd" style="height: 18px;">
<td style="height: 18px; text-align: center; width: 170px;"><strong>max_height</strong></td>
<td style="height: 18px; text-align: center; width: 123.767px;">۰</td>
<td style="height: 18px; text-align: center; width: 135.833px;">None</td>
<td style="height: 18px; width: 627.4px;">حداکثر طول در صورتی که صفر تنظیم شود اندازه نامحدود می شود</td>
</tr>
<tr class="row-even" style="height: 18px;">
<td style="height: 18px; text-align: center; width: 170px;"><strong>min_width</strong></td>
<td style="height: 18px; text-align: center; width: 123.767px;">۰</td>
<td style="height: 18px; text-align: center; width: 135.833px;">None</td>
<td style="height: 18px; width: 627.4px;">حداقل عرض در صورتی که صفر تنظیم شود اندازه نامحدود می شود</td>
</tr>
<tr class="row-odd" style="height: 18px;">
<td style="height: 18px; text-align: center; width: 170px;"><strong>min_height</strong></td>
<td style="height: 18px; text-align: center; width: 123.767px;">۰</td>
<td style="height: 18px; text-align: center; width: 135.833px;">None</td>
<td style="height: 18px; width: 627.4px;">حداقل طول در صورتی که صفر تنظیم شود اندازه نامحدود می شود</td>
</tr>
<tr class="row-even" style="height: 18px;">
<td style="height: 18px; text-align: center; width: 170px;"><strong>max_filename</strong></td>
<td style="height: 18px; text-align: center; width: 123.767px;">۰</td>
<td style="height: 18px; text-align: center; width: 135.833px;">None</td>
<td style="height: 18px; width: 627.4px;">حداکثر طول نام فایل در صورتی که صفر تنظیم شود اندازه نامحدود می شود</td>
</tr>
<tr class="row-odd" style="height: 18px;">
<td style="height: 18px; text-align: center; width: 170px;"><strong>max_filename_increment</strong></td>
<td style="height: 18px; text-align: center; width: 123.767px;">۱۰۰</td>
<td style="height: 18px; text-align: center; width: 135.833px;">None</td>
<td style="height: 18px; width: 627.4px;">هنگامی که overwrite تنظیم شده باشد false در صورتی که تکراری باشد فایل هم ه اندازه این گزینه بزرگتر باشد جایگزین می نماید</td>
</tr>
<tr class="row-even" style="height: 36px;">
<td style="height: 36px; text-align: center; width: 170px;"><strong>encrypt_name</strong></td>
<td style="height: 36px; text-align: center; width: 123.767px;">FALSE</td>
<td style="height: 36px; text-align: center; width: 135.833px;">TRUE/FALSE (boolean)</td>
<td style="height: 36px; width: 627.4px;">در صورتی که درست باشد نام فایل را به صورت کد می کند و این گزینه خیلی موثر و بدرد بخور است</td>
</tr>
<tr class="row-odd" style="height: 36px;">
<td style="height: 36px; text-align: center; width: 170px;"><strong>remove_spaces</strong></td>
<td style="height: 36px; text-align: center; width: 123.767px;">TRUE</td>
<td style="height: 36px; text-align: center; width: 135.833px;">TRUE/FALSE (boolean)</td>
<td style="height: 36px; width: 627.4px;">در صورت درست فضاهای خالی در نام فایل به _ تبدیل می شود.</td>
</tr>
<tr class="row-even" style="height: 36.1333px;">
<td style="height: 36.1333px; text-align: center; width: 170px;"><strong>detect_mime</strong></td>
<td style="height: 36.1333px; text-align: center; width: 123.767px;">TRUE</td>
<td style="height: 36.1333px; text-align: center; width: 135.833px;">TRUE/FALSE (boolean)</td>
<td style="height: 36.1333px; width: 627.4px;">در صورت درست بودن سرور چک می کند که فایل خطرناک نباشد</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>در ادامه &#8230;</h2>
<p>توجه داشته باشید به هیچ وجه بارگزاری فایل در کد ایگنایتر محدود نمی شود ولی پایه و اساس بارگزاری فایل در کد ایگنایتر را آموزش دادیم ولی در ادامه شما می توانید کتابخانه ای داشته باشید و بارگزاری را باستفاده از آن کتابخانه انجام دهید همچنین شما می توانید بارگزاری را با استفاده از آجاکس انجام دهید .</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="xs_social_share_widget xs_share_url after_content 		main_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content">
<ul>
			        </ul>
</p></div>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
